═══ 1. Readme First ═══ FastLst Readme First Development of V7/V7+ programs How to develop programs that use the Version 7 nodelist: If you are interested in developing programs that access the V7 nodelist, you can find all the necessary information in the BinkleyTerm 2.60 sources (BSRC_260.ZIP) or you can use the OS/2 DLL provided by Jim Dailey (V7NL.ZIP); both files are requestable from 2:332/504@fidonet. For a criterion to avoid problems in concurrent access to the V7/V7+ files while FastLst is building/renaming them, please see "V7+ Semaphore" in the V7Plus.Doc file. Version 7 Plus format For information about the new extensions to Version 7, please see "Version 7 Plus" or the V7Plus.Doc text file. ═══ 1.1. Files in the archive ═══ Files in the original archive: File_Id.Diz The standard description Fastlst.Exe The executable FastLst.Ico An Icon for FastLst FastLst.Inf The Inf documentation Readme.1st This file Whatsnew.Txt Fixes and additions Fast_Min.Cfg The sample minimal configuration file Fast_Ful.Cfg The sample full configuration file Compress.Cfg The sample compression definition file FastLst.Doc The Ascii documentation License.Doc The License Register.Doc The Registration Docs Register.For The Registration Form BmtMicro.For The BMT Micro registration form PsL.Crd The PsL Credit Card registration form supplement V7Plus.Doc The Version 7+ standard v7p_src.zip The Version 7+ example source code OS/2 Only FastLst2.Ico An Icon for FastLst/2, by Andrea Vavassori Dos Only Dos4Gw.Exe Dos Extender (major releases only) Dos4Gw.Doc If you have a maintenance release of the program, the dos extender will not be included, to avoid unnecessary distribution costs. The OS/2 Inf manual is provided with other versions too, since there are INF viewers under Dos. For example, the very nice viewer by Damir Ujcic: VIEW01.ZIP, available for F/R from 2:332/504@fidonet: it contains a text mode viewer in both OS/2 and Dos versions. ═══ 1.2. Whatsnew ═══ Whatsnew If you are using an older version of the program, please read WhatsNew.Txt before using this version. ═══ 1.3. How to contact the author ═══ How to contact the author If you have suggestions, bug reports, observations about the docs, please feel free to contact me at the following addresses: Alberto Pasquale of 2:332/504@fidonet alberto.pasquale@interbusiness.it 2:332/504@fidonet +39-59-246112 X75 V120 X2 V34+ VFC V32T H16 Fax: +39-59-246113 Alberto Pasquale, Viale Verdi 106, 41100 Modena, Italy IMPORTANT: if you call crash and require an answer, please state whether you want it routed (might not be reliable) or ON HOLD (in which case an answer should be available in 48h maximum, apart from the holiday periods). ═══ 1.4. Support ECHO ═══ Support ECHO I am originating an international support echo for all my programs. If you are interested, please ask your echo feeder to find a suitable link for the APWORKS area. In addition, I regularly read the international OS2BBS echo. ═══ 1.5. TIC distribution ═══ TIC distribution All my BBS related programs are distributed via a TIC file area. If you want to join, please ask your file feeder to find a suitable link for the APBBS (OS/2), APBBSDOS (Dos), APBBSWIN (W32) areas. Public Beta versions are distributed without restrictions in APBBSBETA. There are also APTOOLS for 3rd party tools related to APWORKS programs and APWORKSG for German documentation by Roland Schiradin. ═══ 1.6. APWorks Programs and Support Areas ═══ Where to look for APWorks Programs and Support Areas In North America the APWORKS support echo should be easily available, since it is on the Zone 1 backbone. The following systems carry the ApWorks echo and file areas: Author's APWORKS Alberto Pasquale, Modena, Italy alberto.pasquale@interbusiness.it 2:332/504@fidonet +39-59-246112 X75 V120 X2 V34+ VFC V32T H16 File requests could be declined between 23:00 and 06:00 GMT. Request APFILES for a (short) list of APWORKS files only. Europe ApWorks_Germany Roland Schiradin, Eltville, Germany schiradi@tap.de 2:2454/169@fidonet Cyberia/2 Harald Kamm, Bamberg, Germany 2:2490/3045@fidonet Air Applewood Vince Coen, Roydon, Harlow, Essex, United Kingdom 2:257/609@fidonet North America COMM Port OS/2 Bob Juge, Sugar Land, TX, USA bob@juge.com 1:106/2000@fidonet Common Sense Mike Burgett, Newark, CA, USA burgett@cmnsens.zoom.com 1:215/705@fidonet Eclectic Lab 1 Mary-Anne Wise, New Westminster, BC, Canada 1:153/831@fidonet Filebone: MaxFDN Available via Planet Connect, PageSat, Filebone, paonline ftphub and the Filegate Project. Australia Tardis BBS Malcolm Miles, North Balwyn, VIC, Australia 3:633/260@fidonet ═══ 1.6.1. File Areas on the Internet ═══ File Areas on the Internet USA ftp.juge.com cmnsens.zoom.com /pub/apworks/bbs /pub/apworks/bbsdos /pub/apworks/bbswin /pub/apworks/tools /pub/apworks/beta ftp.oeonline.com /pub/Maximus ftp.bmtmicro.com /bmtmicro Only the public release versions of programs that can be registered via Bmt Micro. ═══ 1.7. Latest Versions ═══ How to Request the Latest Version of APWORKS Programs The following magics are honoured by APWORKS and some of the support sites: Magic Name Description APFILES ApFiles.Lst List of Programs by Alberto Pasquale FASTLST FLST???.RAR OS/2 The ultimate v7+ Nodelist processor. Fully automated processing and maintenance, no need for clumsy batch files. Can report to Squish or *.MSG areas, multitasking friendly, many options. FASTLSTD FLSTD???.RAR DOS FASTLSTW FLSTW???.RAR NT FASTLSTG German Docs by Roland Schiradin Available on 2:2454/169 NEF NEF???.RAR OS/2 TIC file distribution and announcement for Binkley-style outbound and *.MSG or Squish message base, file-Areafix included with FileBone support, full multitasking aware (BSY, file sharing etc.), exceptionally flexible Multi-Aka support. NEFD NEFD???.RAR DOS 32 bit only, w DOS4GW extender. NEFW NEFW???.RAR NT NEFG German Docs by Roland Schiradin Available on 2:2454/169 FLM FLM???.RAR OS/2 File List Manager for Maximus, very flexible way of compiling many different lists at a time. Internal file base support (no need for FBP). FLMD FLMD???.RAR DOS 32 bit only, w DOS4GW extender. FLMW FLMW???.RAR NT NMFW NMFW???.RAR OS/2 Multi-Robot: netmail forward to Sysop's point, Maximus user and file management via netmail messages, areafix for squish, point routing to their boss if no phone number for them in the nodelist, etc. NMFWD NMFWD???.RAR DOS 32 bit only, w DOS4GW extender. NMFWW NMFWW???.RAR NT QFB QFB???.RAR OS/2 Substitute for FBP.EXE Generates a separate file-request index with no duplicates. QFBD QFBD???.RAR DOS 32 bit only, w DOS4GW extender QFBW QFBW???.RAR NT QFBG German Docs by Roland Schiradin Available on 2:2454/169 SQPRV SQPV???.RAR OS/2 Local area (private/public) forward to points for Squish. The (Co)SysOp points can receive the whole area. SQPRVD SQPVD???.RAR DOS ----- SQFM110.RAR OS/2 Allows to change the "from address" of PKTs before they are compressed. To be used with Squish. For example, it is useful to Hub coordinators who want to continue processing mail with their primary address for current links while processing with the administrative address for their uplink BackBone. FreeWare. ----- SQFMW110.RAR NT ----- HBRT110.RAR OS/2 Useful to coordinators (above HCs) that use Squish. Automatically updates the Hub definitions in ROUTE.CFG taking the data from a V7 nodelist. ----- HBRTD110.RAR DOS ----- HBRTW110.RAR NT ----- SqSetAll.Rar OS/2 Sets renum limits in all Squish Areas taking the parameters from Squish.Cfg. ----- SqSetDos.Rar DOS Dos version. ----- AdjFDate.Rar OS/2 Changes by +-N days the File Date. Can choose between Creation and Modification dates on HPFS. Show and Touch options. ----- AdjF_Dos.Rar DOS Changes by +-N days the File Date. Current versions (June 19th 1997): NEF 2.38, FastLst 2.00, FLM 1.40, NMFWD 2.07, QFB 1.10, SQPrv 1.04. ═══ 1.8. Bug Reports ═══ Bug Reports If you find out a real bug, I will do my best to fix it and make the new version available in a few days. To do that, I need your cooperation: when you find a strange behaviour, double check your configuration and the manual to be really sure it's not your fault, then study the conditions in which the bug appears and, in the end, send me your detailed report about the bug together with your config file and all the stuff necessary to replicate the problem. I can fix a bug only if I am enabled to reproduce it ! ═══ 1.9. Wish List ═══ Wish List To help me provide a better and better program, please let me know your problems and your wishes about future versions. Please let me know your opinion: Alberto Pasquale 2:332/504@fidonet alberto.pasquale@interbusiness.it BBS: +39-59-246112 X75 V120 X2 V34+ VFC V32T H16 Fax: +39-59-246113 Viale Verdi 106 41100 Modena Italy ═══ 2. Whatsnew ═══ FASTLST Changes and Additions ═══ 2.1. 2.00 ═══ 2.00 Public Release, June 19th 1997 - WARNING: this is not a Drop-In replacement. Some statements have been dropped. New Features - Support for new V7+ nodelist format, via the "Version7+" statement. To enable V7+, just use "Version7+" in the place of "Version7". Version7+ [[.]] Examples: Version7+ \bbs\v7 NODEX SYSOP Version7+ \bbs\v7 NODEX If SysOp is not specified, .SDX is assumed. Generated files: .DAT .NDX .DTP V7+ data file .PDX Phone Index .SDX or as specified by - The DTP file is linked "in memory" by default. Since this can be a quite memory hungry task, FastLst will automatically revert to "On Disk" linking mode if there is not sufficient memory. - New LinkOnDisk statement (after Version7) to make FastLst link the DTP file using Disk instead of memory. Version7+ \bbs\v7 NODEX LinkOnDisk - New errolevel 17 "Error Linking" - Additional arguments for "Nodelist" statement: Nodelist [PartAddr [ []]] Since FastLst links the "fidonet" hierarchy, it is important to specify region and hub when the nodelist segment does not contain this type of information. - Additional arguments for the "NODE" keyword: Node,<4Daddr>[ [ ]],... - It is now possible to assign call and user costs depending on modem type for Verbatim phone numbers. In the Typedef lines you can configure the costs: Typedef [...] VMODEM 200 100 0 [...] End The call cost is 100, the user cost is 0. - It is now possible to configure special dial translations for non-PSTN "phone numbers" that FastLst takes "verbatim" by default. These dial translations DO NOT affect the indexed entry (in .PDX) and are intended as a work around for the dial translations operated by the mailer program. The syntax requires a set of strings to be put on the Typedef line that defines the affected "Modem Flag". The first character of each string will be substituted with the remaining characters. A string containing space MUST be included in quotation marks. If the quotation mark is needed inside the quoted string, it must be double. 15 strings of 5 characters are allowed. ATTENTION: This feature is only available in normal (non BitType) mode. Example: You need to translate '.' to '*', ':' to ' ', 'v' to 'V'; call_cost=100, user_cost=0: Typedef [...] VMODEM 200 100 0 .* ": " vV [...] End You want to translate '.' to '\.', ':' to ' ', 'v' to 'V'; call_cost=150, user_cost=100: Typedef [...] VMODEM 200 150 100 .\. ": " vV [...] End Recommended dial translations for Binkley and VMODEM: -\- .* vV ~\~ ": " - New "digital" costs. For people who want to differentiate analog and digital costs. In the Dial or Cost table you can indicate 2 more fields; let's consider a Dial-table line Prefix New Call User Comment to Prefix Cost Cost match 43 0043- 4 0 ; Austria If you do not define the optional new fields, the indicated costs are for both analog and digital. 43 0043- 4 0 8 0 ; Austria In this line: Analog Call cost = 4 Analog User cost = 0 Digital Call cost = 8 Digital User cost = 0 If the Digital User cost is omitted, it is taken equal to the Digital Call one. How can FastLst know about digital calls ? A new parameter is available in Typedef: Typedef X75 1 DIGITAL ; X75 digital PSTN V120 2 DIGITAL ; V120 digital PSTN V34 3 ANALOG ; V34 analog PSTN V32 4 ; V32 analog PSTN VM 5 5 0 .* vV ": " ; VMODEM with costs and dial ; translations End The ANALOG specification is optional. - Multiple PasswordFile statements now allowed without restrictions. - New statement "Include " to allow inclusion of files in FastLst's configuration. - New statement: NoPointLstPhone. Can be used in Input, Output or Global blocks. It is useful when you want to _remove_ the phone numbers specified in the PointLists (German or "Boss" styles) and change them to "-Unpublished-". If you use Squish and Binkley, you usually will like pointlists with the Boss' phone in the point entries (otherwise a crash message to a point will have to be manually readdressed to its Boss). But if you use a netmail manager (as NmFwd) that already routes the crash messages for points that do not have a phone to their Boss, then you will probably like this statement. - New statement: LogStats. Can be used in the output section of an output block. It makes FastLst output the statistics for the (output) nodelist to MsgLogArea. Example: Version7... LogStats Dropped Support - Dos 16 bit version dropped. The 32 bit version has the following memory requirements: 100K of base memory, 7MB of DPMI for 60000 nodes. - Now indices are always processed in memory: dropped "FileMode" and "TmpPath" configuration statements and "-t" command line switch. - Dropped support for SysOpLst, SysDup and IncSysOp configuration statements: the SysOp index will always contain all the entries that are compiled to .DAT. - Dropped NoDash keyword: no use. - The '#' does not mean "take the phone verbatim" anymore. Now any phone containing non-numeric characters is taken verbatim. - Dropped support for stripping flags in Dial/Cost table. - ATTENTION: The "separate Cost Table" and the "BitType" options are still supported in this version of FastLst but are considered obsolete and their support will be dropped in the future. Changed Behaviour - When a timeout happens accessing the BSY semaphore, FastLst now proceeds with the following "Output Block" (previously it aborted). - In the case FastLst terminates with errorlevel 12 or 14, next time it will retry compilation, as expected (previously it had to be forced with -f in case of errorlevel 12). Bug Fixes - When Version7 specified a path containing the '.' character, FastLst didn't add the default ".NDX" extension to the SysOp index filename. Fixed. ═══ 2.2. 1.36 ═══ 1.36 Public Release, July 18th 1996 - "LocalValues" can now be used multiple times for users at the crossroads of multiple area codes. See the docs under "Dial Table". - The "Phone" statement has been extended to: Phone [#] [ [ []]] - Phone specifications starting with '#' are taken verbatim (no dial translation, no cost look-up); this may be handy for internet addresses and script names. - New statement "CostVerbatimPhone " to specify default costs for "verbatim" phone specifications. ═══ 2.3. 1.34 ═══ 1.34 Public Release, July 1st 1996 - OS/2: New statement "ArcDate Write|Creation" to choose which date must be used by FastLst to compute the age of archived nodelist files, defaults to Creation, ignored by non-OS2 versions. - New errorlevel 16: nothing found after unarchiving a fixed-name nodelist. - When dealing with fixed-name nodelists, FastLst now always sets the archive date to the same value of the included file. - Under certain conditions the old versions of FastLst might re-archive the original nodelist file, so that it may fail TIC CRC-check when forwarded. The problem arises when the following conditions are satisfied at the same time: - new nodelist archive file - new configuration - zipmethod includes the original archive type - Improved documentation. ═══ 2.4. 1.33 ═══ 1.33 - OS/2: Version 1.32 invoked the command processor when executing external commands with no .exe or .com extension specified, instead of trying to load the executable directly. This was due to an overlook of the DosExecPgm OS/2 API, used to improve compatibility in the case of substitution parameters containing "special" OS/2 characters. Now FastLst tries to load the command as specified, then it tries with .COM extension appended, in the end with .EXE. ═══ 2.5. 1.32 ═══ 1.32 - New "MultiLineDesc []" statement for enabling Multi-Line description support. - New "FlagDef" table to associate nodelist flags to user defined bits. - In "Version7 " you can now specify an extension for . If no extension is specified, ".NDX" is assumed if is different from , otherwise the ".SDX" extension is used. - New .BSY V7 semaphore to avoid concurrent access to nodelist files during compilation. - New errorlevel 14 exit on timeout on V7 semaphore. - The "MsgRem" used alone, will report all comment lines, excluding the empty ones. - Use of "Phone " for scripts and internet addresses (not new, just explained): Examples: My country code is 39 (Italy) and the area code is 59 (Modena): Phone 1:106/2000 39-59-#juge*com ; VMODEM address Phone 1:123/4567 39-59-12*34*56*78 ; telnet IP address Phone 2:245/6789 39-59-"Bob.scr" ; quoted script name - Some configuration errors better flagged. - V7 packing algorithm improved in speed. - Dropped OS/2 16 bit version - New NT version. Unfortunately it doesn't work under W95 (the external commands seem not to work so that nodelists can't be packed/unpacked. Maybe when I will upgrade the Watcom compiler, I will support W95 too. - New icon FastLst2.Ico for OS/2. - New Registration sites. ═══ 2.6. 1.31 ═══ 1.31 - New "CostNullPhone []" global keyword, to allow the specification of costs to be assigned to nodes with empty (unpublished, etc.) phone number. defaults to . If CostNullPhone is not used, defaults to 65535 and to 0. Example: CostNullPhone 1000 0 Some programs might have bugs that cause problems dealing with high costs (such as the default 65535). Should you experience problems with entries that have a "NullPhone", try setting a lower cost e.g. "CostNullPhone 900 0". - Before applying a diff, the CRC of the OLD nodelist (as reported in its first line) is compared to the one reported in the diff file. Previously this check was not done, so in the remote case you were applying a diff to an illegal nodelist (e.g. a european diff to an american nodelist), the error was discovered only at the end of the application, when checking the CRC of the resulting nodelist. - Checks added to warn about illegal empty Cost or Dial tables. Previously the program hanged. - No more Access Violations when "ArcDiff" is used without "NodeDiff" (it is a strange configuration, but it is now legal). - Fixed bug that caused access violation applying a nodediff when using "NodeDiff" without "ArcDiff" (anyway you are encouraged letting FastLst do all the work it is designed for...). - The number of archived nodelists to be kept (as specified in the ArcList statement) is now checked a second time after nodediff application, so that the required number of archives is kept exactly. Previously, after nodediff application, there was one archive more than specified. - When specifying 0 in "ArcList", the nodelist is not archived (previously was archived and then deleted). - Changed Compress.Cfg to support the OS/2 RAR. - Dos versions are now distributed with the same executable names as the OS/2 versions: FASTLST.EXE (32 bit) and FASTL16.EXE (16 bit). ═══ 2.7. 1.30 ═══ 1.30 - WARNING: FastLst v 1.30 is NOT a true "Drop In" replacement for v 1.20, anyway there is little to change: - Add a "CompressCfg " line to the "Global Info" section of your fastlst.cfg. - Remove all "Arc" and "UnArc" lines. - In each "Input block" section where you would like to be able to compress new nodelists (e.g. where Nodediffs are processed and you were using "Arc" statements), add one or more "ArcMethod ,[] ..." lines, where represents one of the archiving methods defined in (e.g. ZIP, LH, etc.) and the optional is an override for the initial character of the archived file extension (in the case it is named after the day of the year and you do not want to use the first character of the default extension, as defined in ). - See FastLst.Doc for more information. - DOS: There is a new 32 bit version with the DOS4GW extender. - OS/2: There is a new 16 bit version for those who still use OS/2 1.3. - OS/2 32: the "Priority" statement can be used to change the priority for the FastLst process. - The 32 bit versions can now be configured to use the temporary file instead of working in memory. The "FileMode" statement and the "-t" command line switch are used for selecting the mode. - The routines used in 32 bit versions for "in memory" work (no temporary file) have been completely rewritten in order to need far less memory. This way, the 32 bit versions usually allocate about 1/4 of the memory they needed with v 1.20. This is an important issue on systems with not too much physical RAM (especially for the DOS version, that cannot efficiently use virtual memory), but the benefits are noticeable even on systems with plenty of RAM (less OS/2 swap reorganization when FastLst ends). - The "TmpPath" config statement is no longer needed: FastLst will use the TMP or TEMP environment variable if no TmpPath statement is used. - If you want FastLst to kill all uncompressed nodelist (except for those that are not stored in compressed format too), just add a "KillSource" line to the "Global Info" section of FastLst.cfg. - All the ArcList and Arcdiff statements can now work WITHOUT the specification of the first letter of the extension, i.e. "ArcList NodeList.z??" can be changed to "ArcList NodeList.???" and "ArcDiff NodeDiff.z??" can be changed to "ArcDiff NodeDiff.???". This way FastLst will automatically handle any archive type that shows up in the ArcList directory. - Now all the nodelists and nodediffs can be maintained in many different archived formats. The archiving method for NodeDiffs must be specified using "ArcDiffMethod ,[] ...". - The "block" structure of the config file remains, but it becomes a lot more flexible: the majority of config verbs can now be anywhere in the config file, but they have effect on different nodelists depending on their position in the cfg. E.G.: "PasswordFile", being an address related verb, can be both in the "Output Nodelist" and "Input Nodelist" sections. If you use it after "Version7" but before the first "NodeList", then it will be used for all the NodeLists of that "Output block". If you use it after a "NodeList", it will be used (as in the past) for that Nodelist only. Other non-address related verbs (e.g. ArcMethod) can be everywhere (global, output nodelist, input nodelist) and the will affect the operations depending on their position (global: all the nodelists; output: all the nodelist in the current output block; input: the current nodelist only). - "NoRedir" verb: the nodes that should be redirected will acquire the empty string as phone number, so that you will never call a system different from that you think you are calling. - Many new verbs have been added to support external operations; the names are self explaining: BeforeArcList AfterArcList BeforeUnArcList AfterUnArcList BeforeUnArcDiff AfterUnArcDiff BeforeArcDiff AfterArcDiff All the preceding verbs support the %a (complete archive name) and %f (add/extract file name, no path) parameters. BeforeEdit AfterEdit The preceding verbs support the %l and %d parameters standing for the full pathnames of the NodeList and NodeDiff files. BeforeCompile AfterCompile The preceding verbs support the %l parameter only. BeforeKillSource The preceding verb does not support any parameter. It is executed even if "KillSource" is not used. It is a means to invoke a command before FastLst ends. The "NeededBeforeKill" verb must be used to specify the NodeLists needed by this command. See FastLst.Doc for more information. - A new cfg section is now available: "NoCompile". It is a means for maintaining a NodeList (applying nodediffs, archiving with different archivers etc.) without compiling it. - The 3D German PointListst is now internally supported by FastLst. Just use the "GermanPointList" verb in the pertaining block. - When all goes well, FastLst exists with errorlevel 0 if it has compiled something, 100 if nothing new to compile was found. - New method for evaluating the age of a variable extension arcfile: the file date is considered in addition to the 2 digits in the extension. This way you can keep a greater number of old files without creating problems to fastlst, even at the year crossing. - File descriptions in FILES.BBS are now maintained (deleted or added). New statements are available: ArcListDesc ArcDiffDesc can contain the following parameters: %d day %a archiver %D date, USA format %L Local date - The dash is now recognized as insignificant while doing the Dial and Cost translations. - The line # is specified when reporting a config error. - Some information about the compilation can now be reported to a fido/squish message area: see FastLst.Doc for a description for "MsgLogArea", "MsgRemArea" and related statements. - FastLst is now multitasking smarter: e.g. it retries for 15s when it has to delete the old compiled nodelists and rename the new ones. - New Export capability: FastLst is now able to "export" segments of nodelist: see the "Export" section in the docs. - The Dial and Cost tables can be unified: the old syntax is still supported, but a new way can be used for cost and dial specifications. I think that Europeans can continue using the old syntax (if they like), while the Americans should appreciate the new way (due to the complex dial translations needed). - Fixed bug that caused access violations when no "StatusLog" was used. ═══ 2.8. 1.20 ═══ 1.20 - WARNING: FastLst v 1.20 is NOT a "Drop In" replacement for previous versions; you MUST modify the config file following the comments in it before using this version. - In order to make available new powerful options without using clumsy syntax and risking subtle side effects and strange interactions, some obsolete features have been dropped and the methods to specify the files to be compiled have been modified. - FastLst is faster than ever: on my system and with my configuration, the OS/2 version is about 25% faster than v 1.16. If you time it, be aware that the OS/2 version optimizes memory allocation (and speed) basing on the needs of the previous compilation, so it is usually a bit slower on the first run with a new cfg. - The ancient "Version6" nodelist support has been dropped. However the sometime-useful fidouser.lst is still available. - The "MergeList" and "Kill999" options have been dropped. With version7 you can simply compile segments after the full list, since updated entries are put in the indices in the place of old ones. - Added support for compiling multiple V7 nodelists with different output names. - Added support for automatic decompression of nodelists and nodediffs: no more complex batch files. - Now FastLst compiles an output nodelist only if some of its input lists are new: the -f command line switch has been added to force compilation. - Pay Attention: version 1.14 introduced a new behaviour in generating V7 indices to circumvent a bug in Binkley 2.50 V7 search function. Now Binkley 2.58 should have fixed the bug, so FastLst goes back to the "correct" V7 index. A new cfg option has been added to keep using the "bug-circumvent" index form: see "V7BugFix" in the example config file. ******************************************************* * If you are using an older Binkley or some program * * that have got inspiration from Binkley 2.50 sources,* * you could experience "address not found" problems, * * unless you explicitly activate the "V7BugFix" * * option in fastlst.cfg. * ******************************************************* - The "KillOld" and "AutoErase" verbs have been dropped. Old nodelist and nodediff files are always erased. You can control how many archived files are to be kept via the new archive processing verbs. - The -o -s -l -g -m -p -b command line switches have been dropped since they are now useless. - The "include" cfg keyword and the -i command line switch have been dropped. You can still include lists of passwords in a separate file via the "PasswordFile" cfg keyword, that allows to optionally omit the " Password" keyword in front of each password specification. - Due to the frequent misunderstanding of the real meaning and function of the "Address" config option, I have decided to drop it. These days it is not much useful (in a nodelist compiler), since many systems have various different addresses and we are used to write addresses in the full 4D format to avoid ambiguities. In the various config options that require an address or a part of it, you now need to specify all the required fields, always starting with the zone number: no assumption is made on your zone/net/node. - The obsolete "MaxBaud" and "Baud" verb have been dropped. Should you use an old 2400 non error-correcting modem that needs equal DTE and DCE rates, make sure your front-end is configured to dial using its own max baud rate instead of the baud rate reported by the nodelist for the callee (AutoBaud in Binkley.cfg). - The "Country" and "UCost" verbs have been dropped, the "Dial" and "Cost" tables have been slightly modified to specify domestic and international defaults in a more coherent manner and to include "UCost" info. - The "TypeExact" verb has been substituted by the complementary "BitType" option. Thus the default is now the "Exact Type" used by Binkley 2.55 and newer. - The "TypeCost" verb has been dropped. It was used to differentiate CallCost basing on modem type. This way, in a multi-line environment, you could make each line call the appropriate modem types. To achieve the same goal, please use the front-end dial string selection options (ModemTrans in Binkley). - The totally useless "Name" and "Comments" options have been dropped. - The "Gated" config option has been dropped and the "GateAddr", "GateCoord" verbs have been replaced by "IncAddr", "ExcAddr", "IncCoord". - The "Interlist" config option has been dropped. It is substituted by the "IncSysOp" verb. - The "Type" and "CM" keywords have been dropped. Their functions are more cleanly implemented via the "NodeFlags" verb. - The "TypeDef" statement has been modified to a "table" form, for better coherency. - The addresses in Fidouser.Lst now always have the heading zone number, even if it is the same as yours. - Fixed little bug that could cause some cfg keywords not to be recognized unless followed by a comment ═══ 2.9. 1.16 ═══ 1.16 - Fixed bug in the Register routine that caused some keys not to work (1 every 256). ═══ 2.10. 1.15 ═══ 1.15 - Some programs skip the first entry in V6 nodelist, assuming it is a dummy entry that contains the version number of the nodelist. These programs could loose the "zone number" of the first zone compiled, thus assuming zone 0. Now FastLst puts the "version ID" entry at the start of nodelist V6. ═══ 2.11. 1.14 ═══ 1.14 - Some programs do not correctly read V7 indices when an empty node appears (This happens when a key has no greater keys in the lower index level, so that it points to an empty node). Sometimes these programs could not find part of the V7 nodelist entries. Now FastLst adds a dummy duplicate key to avoid the problem. - New "Node,
,..." keyword to allow straightforwad addition of nodes without the need for Zone and Host lines. - Removed the Point flag in the output nodelist for point 0 entries (after the "Boss,..." keyword). ═══ 2.12. 1.13 ═══ 1.13 - When a totally empty line was found in a nodelist file a strange undesired nodelist entry was compiled. It was not a bug since FTS-0005 does not allow empty nodelist lines, however it has been fixed to avoid problems with private manually written nodelist segments. - The .DOC now reports an "undocumented" feature: when using the "Boss,
" method for pointlists, you can also use the point #0 to easily add the Boss entry, if useful. ═══ 2.13. 1.12 ═══ 1.12 - In the case of SysOps of multiple nodes, all the Name/Address couples are now put in the SysOp lists (fidouser.lst and sysop.ndx). This new behaviour allows to use the great "address choice" feature of TimEd (excellent Dos/OS2 message editor by Gerard van Essen 2:281/527). - New behaviour of "SysDup" option: since now all the name-duplicate sysop entries are kept by default, SysDup allows to keep (for a particular sysop name) only the entry with one of the specified addresses. - Many internal changes, not visible to users: if you find out a new unexpected behaviour, please let me know. - Removed redundant empty lines in nodelist.prn and nodelist.txt after comment lines. ═══ 2.14. 1.11 ═══ 1.11 - CRC is now checked on all nodelist files that have the expected CRC on the first line (previously it was checked when applying nodediffs only). - New errorlevel 10 for CRC Error while compiling nodelist (errorlevel 9 is still used for CRC Error while applying nodediff). - When merging the first line is skipped if it contains the CRC. - New -r command line switch to avoid exit on CRC Error. - New -s command line switch to override SYSOP.NDX base name. - Any file specification can contain drive and path, including -n -d -o -s overrides. - When using Version7 only, the added nodelist segments are appended to the end of the full main nodelist instead of the end of your zone. - Some small changes in Nodelist.Prn and Nodelist.Txt - Fixed bug introduced in v 1.10: when a region segment (no zone entry) was compiled as the main nodelist, zone 0 was erroneously assumed. Now the address levels not present in the main nodelist correctly default to the config address. ═══ 2.15. 1.10 ═══ 1.10 - OS/2: First 32 bit version, compiled by BC++. - OS/2: New "flat" index sorting (no more disk based merge-sort). - OS/2: "TmpPath" option in *.cfg not used any more. - OS/2: Long filename support - DOS: The "TmpPath" directory is now automatically created when necessary. - New improved Disk Full handling (errorlevel 4) - New "-o" command line switch to override output file names (NODEX.* -> .*). - New "KillAfter" config verb, to save old nodelist files in the case of compilation error. - New "Boss
" statement for easier pointlist support (see FastLst.DOC). - New optional partial address parameter in "MyList [default partial address]" to allow the addition of nodelist segments without the need of ZONE, HOST, node prefix lines (V7 only). See FastLst.DOC for more details. - New "-i" command line switch to allow easier different file inclusions. - New "KillOld" config statement to kill old versions of nodelist files. - New "Kill999" config statement to kill the .999 file that remains after merging with MergeList. - Now the .999 file is killed whenever FastLst begins execution, thus you do not have to manually delete it if you stop using the MergeList command. - Now the "Gated" config keyword prevents Hub coordinators of other zones to be put in the output nodelist (only ZC and NC remain). - New "GateAddr" config keyword allows to have only selected zones, regions and nets in the output files. - New "GateCoord" config keyword allows to have in the output files only selected coordinators from the excluded zones, regions and nets. - New errorlevel 9 exit after CRC error while applying a nodediff. If "Autoerase" is active, the nodediff and the resulting nodelist files are erased, otherwise they are renamed to NODEDIFF.BAD and NODELIST.BAD. - New "StatusLog" config statement to specify the log filename in the .cfg instead of the command line. - New "TypeExact" config option to set modem types in a way more coherent with the behaviour of Binkley 2.55 and newer. - New "SysDup" config option to override FastLst's choice when killing duplicate SysOp Names. ═══ 2.16. 1.06 ═══ 1.06 - OS/2: Fixed bug that caused some reg. keys not to work. - DOS: Fixed bug that sometimes caused memory problems during index sorting. ═══ 2.17. 1.05 ═══ 1.05 - New UCOST verbs to set User Cost Different from Call Cost. - OS/2: Fixed bug that sometimes caused "Disk Full" error. ═══ 2.18. 1.04 ═══ 1.04 - Changed redirection criteria: if you have a password with a hold/unpublished system or its coordinator, then it is NOT redirected; instead it gets an empty phone number string. - Slightly changed the algorithm to choose the entry for a multi-SysOp in Sysop.Ndx, so that he never gets data from an entry that is not used due to local segment override. - Added "Flags" Keyword to set the user defined bits. - OS/2: Fixed a bug that caused a "NULL POINTER" error when compiling only Version 6 and FidoUserLst. ═══ 2.19. 1.03 ═══ 1.03 - Added before comment output to fix video output when both comments and report are active, Thanks to Roberto Zanasi. - OS/2: First (16 bit) version, ported by Pasquale Cantiello. ═══ 2.20. 1.02 ═══ 1.02 - Null pointer bug fixed in Merge module, Thanks to Pasquale Cantiello. ═══ 2.21. 1.01 ═══ 1.01 - Minor message and DOC adjusting. ═══ 2.22. 1.00 ═══ 1.00 - First public release. ═══ 3. About FastLst ═══ ************************************************************** * * * * * ******* ** **** ****** **** **** ****** * * ** * **** ** ** * ** * ** ** ** * ** * * * ** * ** ** ** ** ** ** ** * * **** ** ** **** ** ** **** ** * * ** * ****** ** ** ** * ** ** * * ** ** ** ** ** ** ** ** ** ** ** * * **** ** ** **** **** ******* **** **** * * * * * * Version 2.00 * * * * The ultimate V7+ nodelist processor * * * * * ************************************************************** * * * (C) Copyright 1992-1997 by Alberto Pasquale * * * * A L L R I G H T S R E S E R V E D * * * ************************************************************** FastLst 2.00 User's Manual, by Alberto Pasquale ═══ 4. Introduction ═══ INTRODUCTION -> For licensing information, please see License.Doc. Thanks for evaluating FastLst: the ultimate "Version 7+" nodelist processor. Version 7 is a common format for binary nodelists to be used by mailers, message editors and all the programs that need fast access to a compiled nodelist. Version 7+ is fully compatible with V7 and adds lots of new powerful features for V7+ aware applications. ═══ 4.1. Main Features ═══ Main Features - Compiles to Version 7+ format nodelist. - Support for Version 7. - Support for old "Fidouser.Lst" sysop list. - Multiple output nodelist (NODEX.*) compilation from one config file. - The complete maintenance of archived lists and diffs is achieved through internal flexible configuration, with no need for clumsy batch files. - Uses "Squish Style" Compress.Cfg. - Can be invoked from a batch file at predefined events: the compilation will take place only if some new list/diff is found. - Multitasking friendly - The OS/2 version allows for priority setting in the configuration file. - Compilation reports can be posted to Fido or Squish format message areas. - Full 4D (point) support, both via the "Point,..." and "Boss,..." keywords. - Internal support for "German type" pointlists. - Easy addition of nodes via the "Node,
,..." keyword in a private list. - Easy specification of phone strings to be taken "verbatim" for internet addresses and script names. - In the case of SysOps of multiple nodes, keeps all the name/address entries in the sysop index. - User Cost (Msg Fee) can be set different from Call Cost. ═══ 4.2. Credits ═══ CREDITS This program uses the Squish "MsgAPI" code, Copyright 1991-1994 by Lanius Corporation. "Squish" and "Maximus" are trademarks of Lanius Corporation. "BinkleyTerm" is a trademark of Bit Bucket Software Co. "4OS2" is a trademark of JP Software Inc. The archivers referred-to throughout this documentation are Copyright and/or trademarks of the respective owners. "VMODEM" and "SIO" are Copyright by Raymond L. Gwinn. "U.S. Robotics" and "I-modem" are registered trademarks of U.S. Robotics Access Corporation. ═══ 4.3. Overall Operation ═══ OVERALL OPERATION FastLst has been designed to be invoked regularly from one of your main batch files, after mail has been received or at pre-arranged times at your pleasure: if any new (compressed or not) nodelist/nodediff is detected, Fastlst processes them as required (exiting with Errorlevel 0), otherwise it immediately exits (errorlevel 100) with no further delay. When FastLst detects a changed config or password file, it compiles all the affected nodelists even if they are not new. If you want FastLst to compile all of your nodelists even if no new ones are present, you need to use the -f or -i command line switch. For each "output block" in the config file: - New compressed lists or diffs are detected, unarchived and optionally rearchived in supplementary formats. - New diffs are detected and applied: the resulting new nodelist is archived. Before applying a diff, the day number and CRC of the old nodelist are compared against the ones requested by the diff; after application, the CRC of the new nodelist is checked. - New lists are detected and the pertinent output nodelists are rebuilt. If no new list is found for a specific "output block", that output nodelist is not compiled, unless the -f or -i command line switch is specified. OS commands can be issued before or after each operation: for example you can hatch the just created archive file. ATTENTION: - Every time a config file is changed, FastLst rebuilds all the output nodelists, as if the -f command line switch were specified. - Every time a PasswordFile is changed, FastLst rebuilds the nodelists that use it. - The date of the archive files handled by FastLst is set to the same value of the contained file (see ArcDate). ═══ 5. Input Nodelist Format ═══ INPUT NODELIST FORMAT The source nodelists and nodediffs must be in standard "St. Louis" format, as described in FTS-0005. Anyway, FastLst allows some extensions in order to support 4D points, "German style" pointlists, easy single node specifications and "verbatim" phone strings. ═══ 5.1. 4D Point Support: POINT and BOSS Keywords ═══ 4D Point Support: POINT and BOSS keywords First method: Points are entered in the nodelist directly following their bossnode. Each one starts with the "Point," keyword. Example: ... ... ,504,Videl,Modena_I,Roberto_Zanasi,39-59-450600,9600,CM,XA,V34 Point,1,Pasquale,Modena_I,Alberto_Pasquale,-!Unpublished-,9600, Point,2,SysOp,Modena_I,Roberto_Zanasi,-!Unpublished-,9600, Point,3,Carta,Modena,Francesco_Carta,-!Unpublished-,9600, ... ... Second method: Points are entered in the nodelist following the "Boss,
" keyword. Example: ... ... Boss,2:332/504 ,1,Pasquale,Modena_I,Alberto_Pasquale,-!Unpublished-,9600, ,2,SysOp,Modena_I,Roberto_Zanasi,-!Unpublished-,9600, ,3,Carta,Modena,Francesco_Carta,-!Unpublished-,9600, ... ... ═══ 5.2. German Point List ═══ German Point List This is a "normal" 3D nodelist that lists each Boss as a "fakenet" HOST, with the real address as the system name, followed by its points listed as nodes. Example: The following nodelist segment lists points 2:2400/1.1 .2 .3: Host,20000,2400/1,City,Sysop_Name,49-951-999999,9600,CM,V34 ,1,System_Name_1,City_1,Sysop_Name_1,49-951-999999,9600, ,2,System_Name_2,City_2,Sysop_Name_2,49-951-999999,9600, ,3,System_Name_3,City_3,Sysop_Name_3,49-951-999999,9600, ═══ 5.3. The NODE Keyword ═══ The NODE Keyword Another extension over FTS-0005 is provided to allow easy addition of nodes in small private lists. When you need to add a node to your nodelist to call it or to enforce a session password with it, you can use the "Node,
[ [ ]],..." keyword to avoid the necessity of adding the entries for its coordinators. You should specify a full 4D address (point optional). Any subsequent entry will take the current address as a starting point. E.g.: You want to add 9:888/777.3 of Region 88, Hub 700. Please note that there is no need to specify Region and Hub information when using the Node and Boss keywords, since: - if the point's Boss is included via some other nodelist, the Region and Hub information will be taken from its entry; - if the point's Boss is not present in the compiled lists, this point will be removed from the indices (in this case you may want to use two entries for including both the Boss and the point); With "Node,...": ... ... Node,9:888/777.3,System,City,SysOp,1-234-555-6666,9600,CM ... ... With "Boss,...": ... ... Boss,9:888/777 ,3,System,City,SysOp,1-234-555-6666,9600,CM ... ... With the traditional method: ... ... Zone,9,... Region,88,... Host,888,... Hub,700,... ,777,... Point,3,System,City,SysOp,1-234-555-6666,9600,CM ... ... Now let's add 8:101/611 and 8:101/612 in region 10, hub 600: With "Node,...": ... ... Node,8:101/611 10 600,System,City,SysOp,1-234-555-6666,9600,CM ,612,System,City,SysOp,1-234-555-6667,9600,CM ... ... With the traditional method: ... ... Zone,8,... Region,10,... Host,101,... Hub,600,... ,611,System,City,SysOp,1-234-555-6666,9600,CM ,612,System,City,SysOp,1-234-555-6666,9600,CM ... ... ═══ 5.4. Verbatim Phones ═══ Verbatim Phones When a phone entry contains non-numeric characters, it is taken verbatim (i.e. no dial translation is applied to adjust the area code and long distance or international prefixes). Call defaults are defined by the CostVerbatimPhone statement. Note: you might need to change the dots '.' in internet addresses to asterisks '*', in order to avoid that the mailer (e.g. Binkley) translates them: see TypeDef. Examples: Internet address: ,6,System,City,SysOp,Fantasy.Com,9600,CM,VM IP address: ,6,System,City,SysOp,123.456.789.012,9600,CM,VM Script name: ,6,System,City,SysOp,"Fantasy.Scr",9600,CM,V34 See also the Phone statement. ═══ 6. Miscellaneous Info ═══ MISCELLANEOUS INFO ═══ 6.1. Multiple Sysops ═══ Multiple Sysops In the case of SysOps of more than one system, all the name/address couples of compiled entries are output to the SysOp index. ═══ 6.2. Redirected Systems ═══ Redirected Systems Systems that have no valid phone number (Unpublished, on Hold), are redirected, provided you do not exclude redirection using the "NoRedir" config keyword. A redirected system is given the phone number, baud rate, modem type, cost and flags of the preceding coordinator, the Board name is prepended with '-R-'. If you have a session password with the system to be redirected or with the system it should be redirected to, no redirection is done in order to prevent password-mismatch errors in the case the Unpublished/Hold system calls you. Points are never redirected. The systems that have no valid phone number and cannot be redirected take an EMPTY phone number string, so that your mailer does not send unexpected strings to your modem attempting to call these systems, should something appear in your outbound addressed to them. Pay attention: if you want to directly call these null_phone-systems or their coordinators, you have to give them a phone number using the "Phone" statement in the configuration file. ═══ 7. Installation ═══ INSTALLATION 1) There are 3 versions of FastLst: OS/2, W32, DOS 32 (with DOS4GW DOS Extender), distributed in separate archives (see Readme.1st). Choose the one that fits you better. 2) Write your FastLst.Cfg. You can find useful examples in the Fast_*.Cfg files and detailed information in the "CFG REFERENCE" section of this documentation. 3) Edit your batch file in order to call FastLst whenever you would like to test for the presence of new list/diff files and process them. If you do not pass a different pathname as a command line parameter, FastLst.Cfg must reside in the current directory. 4) (OS/2): Make sure you have the MSGAPI32.DLL in a directory contained in your LIBPATH. MSGAPI32.DLL can be found in the Squish 1.11 archive (SQSHP111.LZH). (W32): Make sure you have the MSGAPINT.DLL in a directory contained in your PATH. MSGAPINT.DLL can be found in the Max 3.01 for Windows archive (MAX301N.ZIP). (DOS32): Make sure you have the DOS4GW.EXE Dos extender (from Tenberry Software Inc.) in your path. The DOS4GW extender requires an XMS or DPMI memory driver installed in your config.sys: e.g. HIMEM.SYS, QEMM (by QuarterDeck Office Systems Inc.). 5) FastLst requires a lot of memory to compile long nodelists. A set of input nodelists totalling 60,000 nodes requires approximately 12MB for V7+ "in memory" compilation, 7MB when using "on disk" DTP linking and 4.5MB for simple V7. You have to decide whether to use the "LinkOnDisk" statement in the configuration file. If you have enough physical memory available you should use the default "in memory" mode. On the other hand, if the execution of FastLst is excessively slow, you probably are low on memory and you could benefit by the use of "on disk" DTP linking. (DOS): Even if "in memory" DTP linking is configured, FastLst automatically switches to "on disk" mode if it cannot allocate the needed memory. If you experience "out of memory" errors, then you have to enable the DOS4GW virtual memory mode, using the DOS4GVM environment variable (e.g. for 16MB virtual allocation size: SET DOS4GVM=VirtualSize#16384). This works under real Dos only: if you are using OS/2 dos sessions, use a higher DPMI_MEMORY_LIMIT in the Dos settings. Please note that FastLst tells you (on screen, in the logs, in the report message) how much memory remains during compilation, so that you can realize when you are running in marginal conditions and consequently adjust your configuration before you run out of memory. ═══ 8. Command Line Switches ═══ COMMAND LINE SWITCHES -c Use configuration file instead of FASTLST.CFG. -f Force compilation even if no new list/diff has been detected. -i Ignore FastLst.Dat: run as if it were the first time. All nodelists compiled, all exports executed. -p Prepare: Unarc new lists and diffs, Apply diffs and Arc new nodelists, do not compile nodelists. -r When applying a diff, FastLst usually deletes the newly generated source nodelist file if a CRC error is detected. With this switch the new nodelist is _not_ deleted, so that it will be processed anyway. When compiling a list, FastLst usually aborts the compilation of the current output nodelist if a CRC error is detected. With this switch the current output nodelist will be entirely compiled anyway. -h or -? for help ═══ 9. Errorlevels ═══ ERRORLEVELS 0 - Normal termination, something compiled 1 - Help requested 2 - File Open error 3 - Abnormal termination 4 - Disk Full 5 - Can't find config file 6 - Configuration error 7 - Out of memory 8 - Read error while applying diff 9 - CRC error (applying diff) 10 - CRC error (compiling list) 11 - User Break 12 - Cannot rename temporary output nodelist files 13 - Cannot open source nodelist file 14 - Timeout waiting on V7+ semaphore 15 - Too many nodelists in inbound directories 16 - Nothing found after unarchiving a fixed-name nodelist 17 - Error Linking output files 100 - Normal termination, nothing compiled 250 - MsgApi: Init Error 251 - MsgApi: Area Open Error 252 - MsgApi: Area Lock Error 253 - MsgApi: Area Close Error ═══ 10. Configuration ═══ CONFIGURATION Before analyzing the cfg keywords in detail, let's introduce the overall mechanism that is at the basis of FastLst's configuration. If you are converting from a different nodelist compiler, please forget the old configuration and start from scratch. FastLst.Cfg is divided into several logical blocks and the sequence of the various statements is essential: you cannot just put keywords somewhere in the config file; they must be arranged in the correct order. At first, this characteristic of FastLst's configuration might appear complex to understand, but, as soon as you will grasp its logic, you will understand that it's really easy to write a correct configuration file and you will appreciate its extraordinary flexibility. The first block of configuration is the "Global" one. The verbs in this block refer to the compilation of all the nodelists. Then there are one or more "Output Blocks": each output block refers to the compilation of a single nodelist (e.g. NODEX.*). Each "Output Block" has a "Output section" (with statements regarding the compilation of the whole .* list) and one or more "Input blocks" containing the verbs that describe how to compile each of the source nodelists. The first "Output Block" can optionally be of a special kind: a "NoCompile" block, whose "Input Blocks" describe nodelists that must be maintained (e.g. diffs applied) but not compiled to any .* list. Some statements can be used in blocks of a particular type only, others can be used in many different places depending on what nodelists you want to be affected. As a rule of thumb, you can use each statement anywhere it seems to be logically acceptable. If you feel frightened by such abstract considerations, please take a look at the example Fast*.Cfg files, so that you can quickly realize it's not that difficult. To write your own configuration file you should start modifying the example one that is more adequate to your needs. Now, let's consider all the verbs that are allowed in FastLst's configuration. ═══ 11. Cfg Reference ═══ CFG REFERENCE - Items between square brackets (e.g. []) are optional. - The names of the various Keywords are NOT case sensitive. - When a directory path is required, the trailing backslash '\' is optional. - The ';' character starts comments: any character following the ';' is ignored, unless inside quoted strings. - The maximum length of configuration lines is 254 characters, so don't go further (you can always split address lists into smaller ones). - In the OS/2 version, any file specification can be a legal OS/2 name, between double quotes if necessary. Please, note that the order of the configuration statements follows some logical rule. In order not to create confusion in the .cfg file and not to break some _necessary_ order relation, please follow the scheme proposed in the example Fast*.CFG files and in this reference documentation. Please, be aware that the generation of text files (FidoTxt, FidoPrn, FidoUserLst verbs) and the use of lots of options and overrides can slow down the compilation process: use only the options/overrides that you really need if you mind compilation time. ═══ 11.1. Include ═══ Include You can split the configuration into multiple files, including them via this statement, which can be used everywhere and nested without limits. ═══ 11.2. Global ═══ G L O B A L The following verbs can be used in the Global section of FastLst.cfg. Some of them can be used in other places also, so they are divided into separate sections. ═══ 11.2.1. Section A ═══ G L O B A L Section A The following configuration verbs can be used in the GLOBAL section of FastLst.Cfg. ═══ 11.2.1.1. RegKey ═══ RegKey Registered Users only: is the registration key and it is NOT case sensitive. Example: RegKey dfhyuwru6274623 ═══ 11.2.1.2. Priority ═══ Priority [] Changes the execution priority of the FastLst process (OS/2 only). Ignored by NT and DOS versions. is one of: Idle Regular High is an integer in the range 0...31 and defaults to 0. If you do not use this statement, FastLst will run at the default priority, which normally is "Regular 0". Examples: Priority High 31 Gives Fastlst the highest priority for "non time-critical" processes. It will run fast even if it is in the background and other processes are active. Priority Idle Gives FastLst the lowest priority, so that it loads the system as minimally as possible. It will run significantly slower, especially if in the background or when other CPU intensive processes are in execution. ═══ 11.2.1.3. StatusLog ═══ StatusLog is the name of the file where all the operations performed by FastLst will be logged, following the "Binkley Style". In multitasking environments, please be sure to use a file that cannot be used by other processes at the same time. For example: if (in your system) FastLst can be executed while Binkley is running, please use different log files. Should you not want the log file, you can comment this keyword out. Example: StatusLog d:\bbs\log\FastLst.log ═══ 11.2.1.4. CompressCfg ═══ CompressCfg This is a "Squish style" compress definition file. In the case you are using a case-sensitive de/compression program (e.g. OS/2 ZIP/UNZIP), please make sure to use the correct switches in and/or the correct case (Lower/Upper) in and specifications. You can find the suggested in the example Compress.Cfg file included in the FastLst pack. If you are already using Squish and/or Maximus, you can just specify the name of their compress.cfg (but do check that they indicate the necessary switches to avoid case sensitiveness during extraction). Refer to the "Compress Definition File" section at the end of this document for the syntax of . ═══ 11.2.1.5. InputPath ═══ InputPath Specifies the default path for input files (source nodelists/nodediffs). You can override it by using a full pathname in input-file specifications. Created if not existing. Example: InputPath d:\bbs\nodelist\ ═══ 11.2.1.6. ArcPath ═══ ArcPath Specifies the default path for Archived nodelist files. It usually points to the file area where your TIC processor moves the inbound nodelist archives. You can override it by using a full pathname in Archived-file specifications. Example: ArcPath d:\bbs\file\nodelist\ ═══ 11.2.1.7. ArcDate ═══ ArcDate Write|Creation (OS/2) Selects the date to be used for computing the age of fixed-name archived nodelist files. This setting is useful for HPFS (which has separate Write and Creation dates) and ignored for FAT. If not specified, "Creation" is assumed. Attention: in order to avoid problems in the case the date has been corrupted during the transfer of the file, it is best to choose the same date that your mailer sets as "receive/upload" date or that is touched by your TIC processor. Examples: ArcDate Write ; Use the Write date ArcDate Creation ; same as default ═══ 11.2.1.8. MultiLineDesc ═══ MultiLineDesc [] By default, files.bbs description must be on a single line; this statement enables Multi-Line support. is the number of spaces that must precede the continuation lines. is the continuation character. If is NOT specified, it is assumed that the continuation lines must be preceded by spaces. If IS specified, it is assumed that the continuation lines must be preceded by spaces, the character and one more space. For example, to have the 2nd and following description lines in files.bbs start at the 32nd column, use: MultiLineDesc 31 A description in files.bbs would be like: Test.Zip This is the first description line this is the 2nd line this is the 3rd line ^ ^^ 1 31 32 To have the continuation lines preceded by a '|' character, use: MultiLineDesc 29 | A description in files.bbs would be like: Test.Zip This is the first description line | this is the 2nd line | this is the 3rd line ^ ^ ^ 1 29 32 ═══ 11.2.1.9. KillAfter ═══ KillAfter Old output files are killed after the new ones have been successfully written. The new output files are written to temporary names, then the old ones are killed and the new ones renamed (and FastLst retries for 30s in case of error, to be multitasking smart). Thus you will always have a valid compiled nodelist, even in the case of a compilation error and consequent compile abortion. Besides, your multitasking system can continue operations while FastLst is working. On the other hand you might need some more spare disk space to hold the old and new files during compilation. ═══ 11.2.1.10. KillSource ═══ KillSource Tells FastLst to kill all uncompressed nodelists (that are also available in archived format) before terminating. Please note that FastLst deletes a source nodelist only if the ArcList statement is defined. Besides, when the NodeDiff statement is used, an ArcMethod must be defined to allow the deletion of the nodelist. When no NodeDiff is defined, FastLst assumes that the uncompressed NodeList has been extracted from a corresponding archive. ═══ 11.2.1.11. BeforeKillSource ═══ BeforeKillSource This statement is used to invoke a command of your choice before the source nodelists are killed, upon FastLst completion. is executed even if "KillSource" is not used. It is a means of invoking a command before FastLst ends. The "NeededBeforeKill" verb must be used to specify the NodeLists needed by this command: if one of these nodelists is found new, then this command is invoked after decompressing all the nodelists that have the "NeededBeforeKill" attribute (and have not been decompressed yet). IMPORTANT: is executed ONLY if some nodelist affected by a "NeededBeforeKill" verb has been detected as new. can be any command that is valid for the command interpreter specified in your COMSPEC environment variable. If invokes an executable file, it is loaded and executed directly; otherwise your command interpreter is invoked, so that you can execute a batch file or any other valid command. No variable parameters are supported. ═══ 11.2.1.12. Dash2Comma ═══ Dash2Comma Change dashes to commas in the phone numbers. Useful for people that are still connected to ancient "rotary pulse" electromechanic telephone exchanges. ═══ 11.2.1.13. NoReport ═══ NoReport Do not output nodelist statistics ═══ 11.2.1.14. NoRedir ═══ NoRedir Nodes that do not have a valid phone number (Hold, Unpublished) are usually redirected to their coordinators. When this verb is used, redirection does not take place and the node is given an empty phone number, so that you never call a system different from that you think you are calling. Please note that (even with no NoRedir verb): - points are never redirected; - if you have a password with a system or its coordinator, this node will never be redirected. ═══ 11.2.1.15. V7BugFix ═══ V7BugFix Circumvents a bug with V7 nodelist in Binkley 2.50 (and perhaps in many other programs whose V7 search function was inspired by Binkley's sources) that can sometimes hide segments of V7 nodelist. Binkley 2.60 is OK, but some other programs may not: if you are unsure, keep this keyword active. ═══ 11.2.1.16. MsgLogArea ═══ MsgLogArea [-$] Some information about the compilation can be reported to a fido or squish message area. indicates a message area for reporting compilation logs. -$ specifies that the area is in Squish format; otherwise it is assumed to be *.MSG. The "MsgLog" and "LogStats" statements can be used to add some information that is not reported by default. Examples: MsgLogArea \bbs\mail\net -$ MsgLogArea \bbs\mail\net\ ═══ 11.2.1.17. MsgRemArea ═══ MsgRemArea [-$] The comments found in the compiled nodelists can be selectively reported to a fido or squish message area. indicates a message area for reporting compilation logs. -$ specifies that the area is in Squish format; otherwise it is assumed to be *.MSG. The "MsgRem" statement (see Global Section C) MUST be used to specify which types of comments you want to be reported. Please note that no comments are reported if no "MsgRem" statement is used. Examples: MsgRemArea \bbs\mail\net -$ MsgRemArea \bbs\mail\net\ ═══ 11.2.1.18. MsgFromNode/MsgToNode ═══ MsgFromNode
MsgToNode
Specify the addresses for the created messages.
is a 4D address. Example: MsgFromNode 2:332/504 MsgToNode 2:332/504.1 ═══ 11.2.1.19. MsgTo ═══ MsgTo Specifies the name of the addressee of the created messages. Example: MsgTo Alberto Pasquale ═══ 11.2.1.20. MsgAttr ═══ MsgAttr Specifies the attributes for the created messages. can be a (not case sensitive) combination of: P : Private K : Kill/Sent C : Crash H : Hold D : Direct (crash + hold in squish messages) Examples: MsgAttr P MsgAttr pk ═══ 11.2.1.21. MsgSize ═══ MsgSize Specifies the maximum size of a single message: after this length, the message is split. Defaults to 7K, greater values are recommended, so that the message is not divided into too many parts. Example: MsgSize 60000 ═══ 11.2.1.22. CostNullPhone ═══ CostNullPhone [] Specifies the costs to be assigned to nodes with empty (unpublished, etc.) phone number. is the "call cost" . is the "user cost" (fee for netmail messages). defaults to . If CostNullPhone is not used, defaults to 65535 and to 0. Example: CostNullPhone 1000 0 Note: Some programs might have bugs that cause problems dealing with high costs (such as the default 65535). Should you experience problems with entries that have a "NullPhone", try setting a lower cost e.g. "CostNullPhone 900 0". ═══ 11.2.1.23. CostVerbatimPhone ═══ CostVerbatimPhone [] Specifies the costs to be assigned to nodes that have a verbatim phone specification. is the "call cost" . is the "user cost" (fee for netmail messages). defaults to . If the statement is not used, both costs default to 0. Example: CostVerbatimPhone 10 0 ═══ 11.2.1.24. Dial/Cost Table ═══ Dial/Cost translation Table With this table you specify the dial translations and the costs to be applied depending on the phone number. Note: This table is not used against "Verbatim Phones". The table begins with "Dial" and ends with the "End" keyword. Each entry has the following format: [] The following two keywords allow to specify groups of exchanges that must be handled by a certain dial table entry: LocalValues [] This keyword is provided for clarity only: it is taken just as a normal specification with no heading "LocalValues". LocalExchanges ... Lists all the exchanges that must be handled as per the preceding dial translation entry (which may be preceded by the "LocalValues" keyword for clarity). Please remember that the line length is limited to 254 characters. You can use multiple "LocalExchanges ..." statements if you like short lines or need more than 254 characters. Please note that all numbers that (after stripping) begin with are considered local. For example, if 220, 221, 222, 223, 224, 225, 226, 227, 228, 229 are all local exchanges, you can indicate 22 to include them all. The use of these two statements in the place of a long list of normal table lines (one for each local exchange) should also speed up the processing of all the nodelist entries that are not in your area code. is a partial phone number to be matched with the initial part of nodelist entries. The dashes are ignored. The of the last entry must be a single dash "-", to mean that all the remaining numbers will take the parameters specified there. can be one of: a: b: / c: / d: / is stripped from numbers beginning with it, then is used to prepend/append the specified strings to the remainder. Case a: is prepended. e.g.: "39- 0" strips "39-" and adds "0" at the beginning of the number. Case b: is appended. e.g.: "39-59- /!" strips "39-59-" and adds "!" at the end of the number. Case c: is prepended and appended. e.g.: "39- 0/!" strips "39-", adds "0" at the beginning and "!" at the end. Case d: Nothing is prepended nor appended. e.g.: "/" The slash is needed to allow the correct interpretation of the subsequent fields. No spaces are allowed between prefix, suffix and the separating slash. You can specify up to 4 cost fields: [ [ []]] Each one has a range 0-65535. is the Call cost, default: 65535. is the User cost, default: . is the Digital Call cost, default: . is the Digital User cost. defaults to if it is specified, otherwise it defaults to . If you like your users to send netmail messages from the BBS with no need for "credits", you should set and to 0. When searching for "PartPhone", the first matching entry is applied: in the case of entries with an initial part in common, you have to specify them in sequence from the longest to the shortest. If no match is possible, the last line specifies the default (thereby international) parameters. WARNING: This table CANNOT be left totally empty: it must contain at least the default entry "- []". Example 1a/b/c (North American viewpoint): There are some groups of phone numbers: 1 - Local numbers. These are usually "toll free" numbers. As a rule of thumb, you must only dial the local number, stripping the Country Code "1" and the Area Code. In the case you live at the crossroads of two or more area codes, it is possible that you have local numbers in area codes that you must _not_ strip. 2 - Area Code numbers. They have your same Area Code but they are long distance. As far as I know, there are many different situations regarding the need to dial the long distance access code "1" and the Area Code. In any case you usually want to differentiate costs. The Country "1" and Area Codes must be stripped and replaced by: (a) the long distance access code "1" (b) the long distance access code "1" + the Area Code (c) nothing In case (b) the number really remains untouched. Even if the Country Code for USA/Canada "1" is numerically equal to your long distance acces code, they are conceptually quite different, and so they will be treated. 3 - Domestic numbers. USA/Canada numbers, with a leading "1", that is the international Country Code for USA and Canada. They must be left untouched, since the american long distance access code is equal to the international Country Code for North America. 4 - International numbers. These are numbers out of USA and Canada. They must be prefixed by "011", that is the international access code. And now let's see how to achieve our goal using FastLst's Dial Table. Example 1a: Let's suppose: - we are in Area Code 414 - the 414 must be stripped for LD calls - the local exchanges are 231, 232, 233, 235, 236, 424 Dial ; strip 1-414- from local numbers, do not add ; a prefix, set call and user costs to 0. LocalValues 1-414- / 0 LocalExchanges 231 232 233 235 236 424 ; Remaining "1-414-" numbers are long distance: ; strip the 414 Area Code and assign costs = 25. 1-414- 1- 25 ; Remaining "1-" numbers are Domestic Long ; Distance. ; Set costs to 50 1- 1- 50 ; Remaining numbers are international. ; Prepend 011 and set call cost to 250 and ; user cost to 500 - 011 250 500 End Example 1b: Let's suppose: - we are in Area Code 604 - the 604 must NOT be stripped for LD calls - the local exchanges are 220 221 222 224 228 230 231 240 241 244 250 251 252 253 254 255 257 258 261 263 264 266 Dial ; strip 1-604- from local numbers, do not add ; a prefix, set call and user costs to 0. LocalValues 1-604- / 0 LocalExchanges 220 221 222 224 228 230 231 240 LocalExchanges 241 244 250 251 252 253 254 255 LocalExchanges 257 258 261 263 264 266 ; Remaining "1-604-" numbers are long distance: ; assign costs = 25. 1-604- 1-604- 25 ; Remaining "1-" numbers are Domestic Long ; Distance. ; Set costs to 50 1- 1- 50 ; Remaining numbers are international. ; Prepend 011 and set call cost to 250 and ; user cost to 500 - 011 250 500 End Example 1c: Let's suppose: - we are at the crossroads of Area Codes 510, 408, 415 - "1-510" must always be stripped - "1-408" and "1-415" must never be stripped - some exchanges are toll-free, others are not Dial ; strip 1-510- from local numbers, do not add ; a prefix, set call and user costs to 0. LocalValues 1-510- / 0 LocalExchanges 224 225 226 227 247 249 252 264 276 LocalExchanges 278 293 317 353 354 416 417 ; Specify local exchanges for area code 408, ; keep "1-408". LocalValues 1-408- 1-408- 0 LocalExchanges 232 251 254 258 259 262 263 272 276 LocalExchanges 321 324 325 383 428 432 433 434 ; Specify local exchanges for area code 415, ; keep "1-415". LocalValues 1-415- 1-415- 0 LocalExchanges 233 234 321 322 323 324 325 326 327 LocalExchanges 328 329 354 424 462 473 493 ; Remaining "1-510-" numbers are not free, ; the country and area codes are stripped. 1-510- / 25 ; Remaining numbers in area codes 408 and ; 415 are not free, nothing is stripped. 1-408- 1-408- 25 1-415- 1-415- 25 ; Remaining numbers in country code "1" ; are domestic: nothing changed, cost 100. 1- 1- 100 ; Remaining numbers are international. ; Prepend 011 and set cost to 2000. - 011 2000 End Example 2 (European viewpoint): We differentiate between city, district, domestic and international. Dial LocalValues 39-59- / 5 LocalExchanges 2 3 4 56 81 82 ; city 39-59- / 30 ; district 39- 0 60 ; domestic long distance 43 0043- 100 ; Austria 32 0032- 100 ; Belgium 45 0045- 100 ; Denmark 33 0033- 100 ; France 49 0049- 100 ; Germany 44 0044- 100 ; UK 31 0031- 100 ; Netherlands 34 0034- 100 ; Spain 46 0046- 100 ; Sweden 41 0041- 100 ; Switzerland 1 001- 200 ; USA/Canada - 00 300 ; others End Example 3 (Separate Analog/Digital costs): For people who pay different charges for analog and digital calls, FastLst allows to specify separate digital costs (that will be used for nodes that are given a Digital ModemType). Let's suppose we want null User Costs and Digital Costs twice as high as the Analog ones. Dial LocalValues 39-59- / 5 0 10 0 LocalExchanges 2 3 4 56 81 82 ; city 39-59- / 30 0 60 0 ; district 39- 0 60 0 120 0 ; domestic long distance - 00 300 0 600 0 ; international End Example 4: Minimal table for sysops that make dial translations and cost assignments somewhere else. Dial - End ═══ 11.2.1.25. Modem Type Table ═══ Modem Type Table This table allows to set the Modem Type, costs and dial translations depending on the nodelist flags. Syntax: TypeDef [ []] [Digital|Analog] ... End is a Nodelist flag (max 49 chars), is a number 0->255. The nodelist flags of each node are searched for s, in the same order as they are listed in the TypeDef table. The must match completely a nodelist flag: if is V32 and the nodelist flag is V32B, it's not a match. The search is not case sensitive. The ModemType field of the compiled nodelist will be determined by the first match only: If you define X75 before V34, a node with both V34 and X75 will have a X75 modem type. When is for a PSTN system, you can optionally indicate whether it is DIGITAL or ANALOG (which is the default); this is useful for assigning special Digital costs if you have configured them in the Dial/Cost table. When is for a non-PSTN system (e.g. internet) you can specify the costs (which override the CostVerbatimPhone) and dial translations. The Call Cost, range: 0-65535 The User Cost, range: 0-65535 The Dial Translations, for "verbatim" phones. These dial translations DO NOT affect the indexed entry (in .PDX) and are intended as a work around for the dial translations operated by the mailer or the modem-emulator. The syntax requires a set of strings. The first character of each string will be substituted with the remaining characters. A string containing space ' ' or semi-colon ';' MUST be included in quotation marks. If the quotation mark is needed inside the quoted string, it must be double. 15 strings of 5 characters are allowed. Example: You need to translate '.' to '*', ':' to ' ', 'v' to 'V'; call_cost=100, user_cost=0: Typedef [...] VM 200 100 0 .* ": " vV [...] End You want to translate '.' to '\.', ':' to ' ', 'v' to 'V'; call_cost=150, user_cost=100: Typedef [...] VM 200 150 100 .\. ": " vV [...] End Recommended dial translations for Binkley and VMODEM: -\- .* vV ~\~ ": " Full example of TypeDef table: for USR Courier I-modem + VMODEM: TypeDef X75 1 Digital ISDNC 1 Digital V120 2 Digital V120H 2 Digital V120L 3 Digital V34 4 Analog VFC 5 Analog V32T 6 Analog H16 7 Analog V32B 8 Analog ZYX 8 Analog ; ZYX implies V32B Z19 8 Analog Z16 8 Analog H14 9 Analog V32 10 Analog HST 11 Analog VM 200 100 0 -\- .* vV ~\~ ": " ; VMODEM End In Binkley.Cfg for the I-modem you can use: ModemTrans 0 ModemTrans 1 AT*V2=6D/ ; X75 ModemTrans 2 AT*V2=1D/ ; V120 ModemTrans 3 AT*V2=1D/ ; V120L ModemTrans 4 AT*V2=3B0D/ ; V34 ModemTrans 5 AT*V2=3B0D/ ; VFC ModemTrans 6 AT*V2=3B0D/ ; V32T ModemTrans 7 AT*V2=3B1D/ ; H16 ModemTrans 8 AT*V2=3B0D/ ; V32B ModemTrans 9 AT*V2=3B1D/ ; H14 ModemTrans 10 AT*V2=3B0D/ ; V32 ModemTrans 11 AT*V2=3B1D/ ; HST ModemTrans 200 In Binkley.Cfg for VMODEM you can use: ModemTrans 0 ModemTrans 1 ModemTrans 2 ModemTrans 3 ModemTrans 4 ModemTrans 5 ModemTrans 6 ModemTrans 7 ModemTrans 8 ModemTrans 9 ModemTrans 10 ModemTrans 11 ModemTrans 200 ATDT#/ ; VMODEM ═══ 11.2.1.26. User Flags Table ═══ User Flags Table This is an optional table used to handle the "user defined" bits in the Flags word of the compiled nodelist entry. These bits are named 5,6,7,8,9,A,B,D,E,F where bit 5 is the 6th bit and F is the 16th bit of the word. Using this table, you can associate (source) nodelist flags to user defined bits in the output binary nodelist. The table is delimited by the "FlagDef" and "End" keywords; each line is in the form " " where is a flag (max 9 chars) to be looked for in the source nodelists while represents one or more user-defined bits in the output Flags word. Example: FlagDef V42B AB ; V42B -> user bits A and B V32B DE ; V32B -> user bits D and E End To add further flags on a node by node basis, please use the "Flags " statement. To remove flags, please specify the source flags via the "NodeFlags " statement. ═══ 11.2.2. Section B ═══ G L O B A L Section B The statements in this section affect the processing of all the output blocks and thereby of all the input nodelists. These statements can also be used in the "OUTPUT" section of an OUTPUT block or inside an INPUT block, in which case they affect the compilation of the relevant block only. In the case you use a verb that has already been used in a "higher level" block, it will behave as a local override. ═══ 11.2.2.1. NeededBeforeKill ═══ NeededBeforeKill Tells FastLst that the affected NodeList(s) are needed by the command run via the "BeforeKillSource" statement. The "BeforeKillSource" verb allows you to run a command (executable or batch file) after the compilation has completed, just before FastLst ends and (if "KillSource" is used) deletes the source files that are also present in archived form. The lists affected by "NeededBeforeKill" are extracted, if not already present, before the "BeforeKillSource" command is executed. ═══ 11.2.2.2. ArcMethod ═══ ArcMethod [,] ... Tells FastLst that it must make sure that all new nodelists are archived using the specified methods. The original archive is NOT killed. Obviously, a new nodelist is not rearchived to its original method. is the name of an archiver defined in compress.cfg. is the optional specification of the letter to be used for the variable archive extension. If not specified, it is assumed equal to the first letter of the defaults extension for this archiver. Multiple ArcMethod statements are allowed. Example 1: ArcMethod ZIP LH,H NodeList.Z48 arrives: it is archived to NodeList.H48 also, using the LH archiver. Example 2: ArcMethod ZIP LH NodeDiff.Z48 arrives: the resulting nodelist is archived to NodeList.Z48 using the ZIP archiver and to NodeList.L48 using LH. ═══ 11.2.2.3. ArcDiffMethod ═══ ArcDiffMethod [,] ... Tells FastLst that it must make sure that all new nodediffs are archived using the specified methods. The original archive is NOT killed. Obviously, a new nodediff is not rearchived to its original method. is the name of an archiver defined in compress.cfg. is the optional specification of the letter to be used for the variable archive extension. If not specified, it is assumed equal to the first letter of the defaults extension for this archiver. Multiple ArcDiffMethod statements are allowed. Example: ArcDiffMethod ZIP LH,H NodeDiff.Z48 arrives: it is archived to NodeDiff.H48 also, using the LH archiver. ═══ 11.2.2.4. External Commands ═══ EXTERNAL COMMANDS The following verbs allow to invoke external commands. can be any legal command-line command: it can be the name of an executable file, a batch file or any command that can be understood by your command-line interpreter (OS/2's CMD, 4OS2, etc.). If does not directly invoke an executable file, FastLst automatically invokes your default command line interpreter (as specified by the COMSPEC environment variable). ═══ 11.2.2.4.1. Archive Related Commands ═══ Archive Related Commands The following verbs share the same syntax: Two parameters are allowed in : %a is translated to the full pathname of the archive file. %f is translated to the name of the file to be added or extracted (no path). is run from the path where %f belongs. ═══ 11.2.2.4.1.1. BeforeArcList ═══ BeforeArcList Command to be run before archiving a nodelist. ═══ 11.2.2.4.1.2. AfterArcList ═══ AfterArcList Command to be run after archiving a nodelist. ═══ 11.2.2.4.1.3. BeforeUnArcList ═══ BeforeUnArcList Command to be run before extracting a nodelist. ═══ 11.2.2.4.1.4. AfterUnArcList ═══ AfterUnArcList Command to be run after extracting a nodelist. ═══ 11.2.2.4.1.5. BeforeArcDiff ═══ BeforeArcDiff Command to be run before archiving a nodediff. ═══ 11.2.2.4.1.6. AfterArcDiff ═══ AfterArcDiff Command to be run after archiving a nodediff. ═══ 11.2.2.4.1.7. BeforeUnArcDiff ═══ BeforeUnArcDiff Command to be run before extracting a nodediff. ═══ 11.2.2.4.1.8. AfterUnArcDiff ═══ AfterUnArcDiff Command to be run after extracting a nodediff. ═══ 11.2.2.4.1.9. Example ═══ Example To hatch the new nodelist (note that you probably need to specify the location of the config file since the command is executed from the directory where %f resides): AfterArcList Hatch %a NODELIST "New NodeList" ═══ 11.2.2.4.2. NodeDiff Related Commands ═══ NodeDiff Related Commands The following verbs accept different parameters: %l is translated to the full pathname of the nodelist. %d is translated to the full pathname of the nodediff. is run from the current directory. ═══ 11.2.2.4.2.1. BeforeEdit ═══ BeforeEdit Command to be run before applying a nodediff. ═══ 11.2.2.4.2.2. AfterEdit ═══ AfterEdit Command to be run after applying a nodediff. Only %l can be used. ═══ 11.2.3. Section C ═══ G L O B A L Section C The statements in this section affect the processing of all the output blocks and thereby of all the input nodelists. These statements can also be used in the "OUTPUT" section of an OUTPUT block (except for the "NoCompile" one) or inside an INPUT block, in which case they affect the compilation of the relevant block only. In the case you use a verb that has already been used in a "higher level" block, it will behave as a local override. ═══ 11.2.3.1. MsgRem ═══ MsgRem [] If MsgRemArea is used, FastLst reports the following comments: No MsgRem statement: none; MsgRem with no : all; MsgRem with : only the comments that begin with "; " where is one of the characters in . The ";" character in means that the comments beginning with "; " or ";" can be reported. Common types of comment lines: ;S This is a comment for SysOps ;U This is a comment for users ;F This comment should appear in formatted Fido lists ;A This is a comment of general interest ;E This comment is an error message Example: "MsgRem SE" Only comments destined to SysOps and Error messages are reported (lines beginning with ";S " and ";E "). ═══ 11.2.3.2. MsgLog ═══ MsgLog [NullPhone] [Redirected] [Points] Some common situations (not really errors) are not reported to MsgLogArea by default: if you want FastLst to report them anyway, you can use this statement, but be aware that very long reports could come out. "NullPhone": systems with empty phone string are logged. "Redirected": systems redirected to their coordinators are logged (Hold, unpublished). "Points": points with empty phone string are logged; be aware that most pointlists contain unpublished (thereby with empty phone) points. Examples: MsgLog Redirected MsgLog Redirected NullPhone ═══ 11.2.3.3. GermanPointList ═══ GermanPointList Instructs FastLst to consider the affected nodelist as a 3D German style pointlist. Zone 2 is assumed, if not explicitly specified in the "NodeList" statement. This verb is usually used inside an Input Block, so that it affects that nodelist only. WARNING: Be aware that using this statement in the global section or in an Output block affects all the involved nodelists ! Example Input Block: NodeList Points24.??? GermanPointList Nodediff Pr24Diff.??? ArcList Points24.??? 1 ArcDiff Pr24Diff.??? 5 ArcListDesc R24 PointList for day %d (%D), %a format ArcDiffDesc R24 PointDiff for day %d (%D), %a format ═══ 11.2.3.4. NoPointLstPhone ═══ NoPointLstPhone Changes to "-Unpublished-" the phone numbers specified in the PointLists (German or "Boss" styles). If you use Squish and Binkley, you usually will like pointlists with the Boss' phone in the point entries (otherwise a crash message to a point will have to be manually readdressed to its Boss). But if you use a netmail manager (as NmFwd) that already routes the crash messages for points that do not have a phone to their Boss, then you will probably like this statement. You will usually find convenient to use this statement in the global section, so that it is valid for all the nodelists. ═══ 11.2.3.5. BeforeCompile ═══ BeforeCompile Command to be run before compiling the affected nodelist. This statement follows the same rules explained in "External Commands" in section B. The %l parameter is translated to the full pathname of the nodelist. is run from the current directory. ═══ 11.2.3.6. AfterCompile ═══ AfterCompile Command to be run after compiling the affected nodelist. This statement follows the same rules explained in "External Commands" in section B. The %l parameter is translated to the full pathname of the nodelist. is run from the current directory. ═══ 11.2.3.7. FidoTxt ═══ FidoTxt [] Generate an 80 Column Text List of nodes. Nodes included via the "Node,..." method and points are excluded. optionally specifies an output file name, which defaults to "NodeList.Txt". If the same file name has already been used for other nodelists, the output is appended. Example: FidoTxt ═══ 11.2.3.8. FidoPrn ═══ FidoPrn [] Generate a 132 Column Text List of nodes. Nodes included via the "Node,..." method and points are excluded. optionally specifies an output file name, which defaults to "NodeList.Prn". If the same file name has already been used for other nodelists, the output is appended. Example: FidoPrn ═══ 11.2.3.9. IncCoord ═══ IncCoord The coordinators of the specified and upper levels will be always included, even if excluded by "IncAddr" and "ExcAddr". can be ZC, RC, NC, HC. Example: IncCoord NC ═══ 11.2.4. Export Section ═══ Global Export Section You can use here the statements described in the "Export Global Section" of the "Export Block" (see "Input Block" inside "Output Block"). ═══ 11.3. Output Block ═══ O U T P U T B L O C K The following verbs define the compilation of a single output binary nodelist. The block begins with a "Output Section", that affects the compilation of all the source (input) nodelists, followed by a sequence of "Input Blocks" that define how to handle each of the source nodelists. The first "output block" can be of a special kind: if the "NoCompile" statement is used instead of "Version7+", this block indicates the actions necessary to maintain the specified nodelists, but they are not compiled. ═══ 11.3.1. Version7+ ═══ Version7[+] [[.]] Start of a block of config verbs defining the generation of an output nodelist. You can generate one or more compiled nodelists with different names and path for the output files. Each "Version7" statement marks the beginning of a new output-nodelist definition. Version7+ is for V7+ while Version7 allows to save space and generate the V7 files only. is the path where the output binary data and index files are placed. is the file name (no extension) for the output files. . is the file name for the sysop-index. When no extension is given, .NDX is assumed if is different from , otherwise the .SDX extension is used. If you omit with Version7+, .SDX is used for the SysOp index. If you omit with Version7, no SysOp index is generated. Usually should be "NODEX" and "SYSOP". If you use V7+ and all of your applications accept .SDX as the SysOp index, you may omit . For compatibility with V7 applications that require "SYSOP.NDX" as SysOp index, "SYSOP" is recommended for . All the following verbs, up to the next "Version7" (if any), are related to the preceding "Version7" output files. Examples: ; SysOp Index name Version7+ d:\bbs\v7\ NODEX SYSOP ; SYSOP.NDX Version7+ d:\bbs\v7\ NODEX NODEX ; NODEX.SDX Version7+ d:\bbs\v7\ NODEX ; NODEX.SDX Version7 d:\bbs\v7\ NODEX SYSOP ; SYSOP.NDX Version7 d:\bbs\v7\ NODEX NODEX ; NODEX.SDX Version7 d:\bbs\v7\ NODEX ; no index Version7 Output files: .DAT Nodelist Data .NDX Address Index .NDX SysOp Index (optional) Some Version7 programs also accept .SDX for the SysOp Index. Version7+ Output files: .DAT Nodelist Data .DTP Additional Data .NDX Address Index .SDX SysOp Index .PDX Phone Index Version7+ programs must also be configurable to accept .NDX as the SysOp Index for compatibility with V7 programs. ═══ 11.3.2. NoCompile ═══ NoCompile This verb can be used to start the first "Output Block", instead of "Version7". This way the first output block becomes a "NoCompile" block and the indicated nodelists are maintained but not compiled. This is a means for maintaining a NodeList (applying nodediffs, archiving with different archivers etc.) without compiling it. The statements related to nodelist compilation (see Global section C) are obviously illegal in a "NoCompile" block. ═══ 11.3.3. Output section ═══ O U T P U T Section The following verbs affect the compilation of the current output block and must precede the definitions of the input blocks (which start with the Nodelist statement). ═══ 11.3.3.1. FidoUserLst ═══ FidoUserLst [] Generate "fidouser.lst style" text SysOp list. optionally specifies an output file name, which defaults to "FidoUser.Lst". Different output blocks require different names. Example: Version7+ d:\bbs\v7 NODEX SYSOP FidoUserLst ═══ 11.3.3.2. LinkOnDisk ═══ LinkOnDisk Forces "on disk" DTP linking. This can be useful to avoid FastLst using virtual memory for linking the .DTP file. If you do not have enough free physical memory (12MB for 60,000 nodes), the "on disk" mode is faster. Example: Version7+ d:\bbs\v7 NODEX LinkOnDisk ═══ 11.3.3.3. LogStats ═══ LogStats Output Statistics to MsgLogArea. This statements makes FastLst write the statistics for the current output-nodelist to the area specified with MsgLogArea. Example: Version7+ ... LogStats ═══ 11.3.3.4. Block Specifications ═══ Block Specifications You can use here the same statements described in the "Global Section B" and (if this is not a "NoCompile" block) "Global Section C" and "Export Global Section" (see the Export Block below). ═══ 11.3.3.5. Address Specific Stuff ═══ ADDRESS SPECIFIC STUFF The following verbs define address specific stuff that will affect the compilation of all the source nodelists compiled in the current output block. These statements are illegal in a "NoCompile" block. If you prefer, you can specify this type of information in the "Address Specific Stuff" section of the pertinent input block. WARNING: make sure all addresses have full info (incl. zone). ═══ 11.3.3.5.1. Password ═══ Password Allows to specify one at a time. Version 7 has no limit on password length, however the programs that use it are usually limited to 8 chars. Some (rare) programs have problems with 8 chars and need a maximum of 7 or 6 chars. Example: Password 2:332/504.4 Password ═══ 11.3.3.5.2. PasswordFile ═══ PasswordFile Allows to include a password file that contains many address/password couples, one per line. In this file you can omit the "Password" keyword. If you like, you can use some "Password" keywords together with one or more "PasswordFile". Please note that the definitions found in this file have effect on the current (Output or Input) block ONLY. FastLst writes to the log file which source or output nodelist is affected by each passwordfile; so, in case of doubts, just check the logs. Example: PasswordFile fidonet.pwd ═══ 11.3.3.5.3. Phone ═══ Phone [ [ []]] Allows to override a nodelist phone number and optionally the corresponding "NodeFlags" and costs. if contains non-numeric characters, it is taken verbatim If contains only digits and dashes '-', it is considered a PSTN number and MUST be in the form used in the source nodelist (dial translation will be applied normally). has the same meaning as in the NodeFlags statement. To specify an overriding empty , use a single comma. and have the same meaning as in the Cost statement. Examples: override only: Phone 2:332/501.1 39-59-399999 ; Normal override Phone 1:106/2000 juge.com ; internet address Phone 1:123/4567 123.456.789.012 ; IP address Phone 2:245/6789 "Bob.scr" ; quoted script name and overrides: Phone 2:332/501.0 39-59-499999 V34,CM ; Set new flags Phone 2:332/501.1 39-59-399999 , ; Set NO flags , and / overrides: Phone 2:332/501 39-59-499999 V34,CM 10 0 Phone 2:332/502 mega.com VM 0 ; == ═══ 11.3.3.5.4. NodeFlags ═══ NodeFlags Allows to substitute the flags listed in the nodelist entry of . If you want to change the CM flag or modem type flags (HST, V32b, ZYX) etc, you can use this verb. Please note that the old flags are lost, so you need to indicate all the necessary flags. Please note that might be empty. Example: NodeFlags 2:332/501.0 CM,H16,V32b ═══ 11.3.3.5.5. Flags ═══ Flags The Flags statement allows to set the "user defined" bits in the Flags word of the compiled nodelist entry. These bits are named 5,6,7,8,9,A,B,D,E,F where bit 5 is the 6th bit and F is the 16th bit of the word. These bits are "ORed" with those already set by the "FlagDef" table. If you need to zero some of the bits, please specify the source flags with the "NodeFlags" statement. Example: Flags 2:332/501.0 AB5 ; Set bits 5,A & B. ═══ 11.3.3.5.6. Cost ═══ Cost [] and are in the range 0->65535. Overrides the Cost and User_Cost fields of in the compiled nodelist. If no is given, it's taken equal to . Example: Cost 2:332/501.0 150 ═══ 11.3.3.6. Segment Selection ═══ SEGMENT SELECTION The following verbs allow to include or exclude selected segments. If you do not use them, the full is compiled. Be aware that the process of checking each address against the list of segments to be included or excluded might slow down the compilation, even if some gain could come from the exclusion of large segments. These statements are obviously illegal in a "NoCompile" block. These statements can be used in an Input block to affect that nodelist only. ═══ 11.3.3.6.1. IncAddr ═══ IncAddr If you want to selectively include nodelist segments, you can use this option: only zones, regions, nets, hubs, nodes, points that are listed in will be present in the output files. You can specify zone, region/net, hub/node and point numbers. Example: IncAddr 1 2:33 2:200/100 3:632 4:801/17 Compiles: zone 1, region 33 of zone 2, hub 100 of net 200 of zone 2, net 632 of zone 3, node 4:801/17 ═══ 11.3.3.6.2. ExcAddr ═══ ExcAddr If you want to exclude some segments from the compilation, you can list them in , in the same way as for "IncAddr". You can use either "IncAddr" or "ExcAddr" or both of them to Include only selected segments and exclude sub-segments. Example: ExcAddr 2:332/500 Excludes Hub 500 of net 332 of zone 2. ═══ 11.3.4. Input Block ═══ I N P U T B L O C K The Input Block starts with a "NodeList" statement and continues until the start of the next Input or Output Block (NodeList or Version7 statement respectively) or the end of the configuration file. ═══ 11.3.4.1. NodeList ═══ NodeList [ [ []]] Start of a block of config verbs defining the processing of the specified file. You can use many "NodeList" statements to compile several different source nodelists into the same output files specified by the preceding "Version7+" statement. Each "NodeList" verb marks the beginning of a new input-nodelist processing-info block. When an address is present in more than one (e.g. you compile both the full nodelist and the faster updated local region or zone segment) only the entry found in the last compiled is put in the indices. To have the most up-to-date entries in your V7 indices, please include local segments after the larger list. is the name of the input nodelist. If you don't specify a path, is assumed. If a terminal ".???" is specified, all the files with 3 digits in the place of '???' are examined and that with the latest 3 digit day of the year is chosen for compilation. The optional is a partial address that must be specified for nodelist segments that do not have full address info. For example, a REGION segment usually starts with the "Region," keyword and does not contain any Zone info: its up to you to tell FastLst which zone we are talking about. For the same reason you should provide zone and net info when compiling a Hub segment. For Net segments you should also specify the and for simple lists of nodes or points the . Anyway FastLst is smart enough to automagically gather Region and Hub information (when possible) from: - same node present in a larger segment (Region and Hub) - other node with same zone:net (Region only) - Boss of the point (Region and Hub) Note: points that do not have a Boss are removed from the indices. Examples: IMPORTANT: Please note that the following lines represent a list of examples, NOT an example of multiple nodelist compilation. After each "NodeList" verb, you must specify all the statements that affect the compilation of that particular source file. 1) NodeList nodelist.??? ; Fidonet nodelist 2) NodeList region.033 2 ; Region 33 list, zone 2 3) NodeList region24.??? 2 ; Region 24 list, zone 2 4) NodeList net.332 2 33 ; Net list, zone 2, region 33 5) NodeList hub.500 2:332 33 ; Hub list, zone 2, net 332, ; region 33 6) NodeList locnode.500 2:332 33 500 ; Some nodes, zone 2, net 332, ; region 33, hub 500 7) NodeList points.504 2:332/504 ; Points of 2:332/504 in ; "Point," format 8) NodeList morenode.lst ; Some nodes in the "Node," ; format. No required ; since the "Node," line gives ; full address info. 9) NodeList ptlist.??? ; Point List in the "Boss," ; format. No required ; since the "Boss," line gives ; full address info. ═══ 11.3.4.2. Input Section ═══ Input Section The following statements affect the handling of the nodelist specified by the last "NodeList" statement (current Input Block). ═══ 11.3.4.2.1. NodeDiff ═══ NodeDiff is the name of the nodediff file. If you don't specify a path, is assumed. must terminate with ".???". FastLst will search for a suitable , considering the files that have a 3 digit day of the year in the place of the trailing '???'. Example: NodeDiff NODEDIFF.??? ═══ 11.3.4.2.2. ArcList ═══ ArcList [] You can specify the name of the archive containing . It is necessary if you use automatic extraction/rearchiving, but it can even be used only to delete old files. is used to extract new nodelists, to compress them using the methods defined in "ArcMethod", to compress the new nodelists after the application of nodediffs. If has a terminating ".???", all the files that have a suitable fixed (.zip, .lzh etc.) or variable (.z10, .z17, .l10, .l17 etc.) extension are considered, taking the digits as the last 2 digits of the day of the year. If you really want to limit search to a specified fixed or variable extension, you can do: "ArcList nodelist.zip", to consider .zip only; "ArcList nodelist.z??", to consider .z?? only. optionally specifies the number of archives to be kept, basing on the day of the year (the modification file date is also used to infer the correct chronological order). If you maintain archives with multiple different extensions (.z??, .l??, etc.) the actual number of files increases, since multiple files with the same day extension count for one. The description associated to the deleted files is removed from FILES.BBS. Example: ArcList nodelist.??? 1 ═══ 11.3.4.2.3. ArcDiff ═══ ArcDiff [] You can specify the name of the archive containing . It is necessary if you use automatic extraction/rearchiving, but it can even be used only to delete old files. must terminate with ".???". All the files that have 2 digits in the place of the last 2 '?' are examined, taking the digits as the last 2 digits of the day of the year. If you really want to limit search to a specified extension, you can do: "ArcDiff nodediff.z??", to consider .z?? only. optionally specifies the number of archives to be kept, basing on the day of the year (the modification file date is also used to infer the correct chronological order). In the case of multiple archive extensions, the actual number increases consequently. The description associated to the deleted files is removed from FILES.BBS. Example: ArcDiff nodediff.??? 5 ═══ 11.3.4.2.4. ArcListDesc/ArcDiffDesc ═══ ArcListDesc ArcDiffDesc You can specify a description to be added to FILES.BBS for the new nodelist and nodediff files created by FastLst. Some parameters are available: %d : the 3 digit day number (0 padded) %a : the archiver name %D : the date, USA format (Feb 10, 1995) %L : the date, Local format Example: ArcListDesc Fido Nodelist for day %d (%D), %a format ArcDiffDesc Fido Nodediff for day %d (%D), %a format ═══ 11.3.4.3. Local Specifications ═══ Local Specifications You can use here the same statements described in the "Global Section B" and (if we are not in a "NoCompile" block) "Global Section C" and "Export Global Section" (see the Export Block below). ═══ 11.3.4.4. Address Specific Stuff ═══ ADDRESS SPECIFIC STUFF You can specify here the address specific stuff that is related to the current source nodelist (if not inside a "NoCompile" block). If you have already used the "Output section" for specifying this kind of information, you can skip this section. WARNING: Often you will compile segments of a previously compiled nodelist. For example you could have a "NodeList nodelist.???" block for the world nodelist and then a "NodeList region.033" block for your region's nodelist segment. The majority of entries in the latter will be duplicates of entries already found in the former. However, in the case of duplicates, only the entries found in the last involved "NodeList" block will go to the indices and be active. This way you can compile the full world nodelist while keeping your segment up-to-date with local segments that get updated faster than the full nodelist. When you have to specify "Address Specific Stuff" for nodes that are present in more than one "NodeList", you must do that in the last involved "NodeList" block (or in the Output Section, of course), otherwise your indications will have no effect. For a list of allowed statements, please see the "Address Specific Stuff" section of the "Output" section above. ═══ 11.3.4.5. Segment Selection ═══ SEGMENT SELECTION You can use here the same statements described in "Segment Selection" in the Output Section (if not inside a "NoCompile" block). ═══ 11.3.4.6. Export Block ═══ EXPORT Block FastLst can "export" segments of nodelist: e.g. you can export the Region 25 from the world nodelist to a file called Region25.???, where ??? stands for the day of the year. Note that this feature is for exporting segments of nodelist to a dedicated file. To compile segments you should continue using the "Segment Selection" section of FastLst.Cfg. These blocks MUST be at the _END_ of an "Input Block"; there can be multiple Export Blocks in a single Input Block. Obviously the Export Block is available for compiled nodelists only, thus it is illegal inside a "NoCompile" block. The export is done ONLY when a new NodeList is found (or when the file to be exported exists neither in uncompressed nor in archived form), even if the config file is changed. So, you can safely hatch the created arcfile via the AfterArcExport command with no danger of hatching it all the times you change something in the cfg. Under these conditions, if you really want to export anyway, you must use the -i command line switch. IMPORTANT: If you use the same export filename for multiple source nodelists, all the exported segments are appended one another. This way, if you like, you can make FastLst generate a "plain" nodelist file with many different source nodelists in it, just appended one after another. Some people need this feature to create input for some other program. For this feature to work, you need to specify the '+' parameter in the "Export" statement. See "Export Example" below. ═══ 11.3.4.6.1. Export ═══ Export [+] [] The '+' sign must be specified when you want to create a joined list by exporting multiple nodelists to the same export . This way the exported file will be created every time the nodelist is compiled and its timestamp will not be changed to be equal to the source. is the name of the file to which you want to export the selected segment(s). is the partial address list of segments to be exported. Usually it is a single partial address. If omitted, the entire nodelist is exported (useful to create a joined nodelist). This statement marks the start of an "Export Block". Multiple "Export Blocks" are allowed in the same "Input Block". N.B. The Export blocks must be at the _END_ of an input block. See "Export Example" below. Example: Export region25.??? 2:25 ═══ 11.3.4.6.2. Export Section ═══ Export Section The following verbs define the parameters for the Export specified by the last "Export" statement. ═══ 11.3.4.6.2.1. ArcExport ═══ ArcExport [Keep#] is the name of the archive file to which you want to compress the exported . [Keep#] is the optional number of archive versions to be kept, basing on the day of the year (the modification file date is also used to infer the correct chronological order). Example: ArcExport region25.??? 2 ═══ 11.3.4.6.2.2. ArcExportDesc ═══ ArcExportDesc is the description to be applied to FILES.BBS when a new archive is created. Example: ArcExportDesc Region 25 %D, %a format ═══ 11.3.4.6.3. Export Global Section ═══ Export Global Section The following verbs can be used in the "Export Section" of an "Export Block", in the "Input Section" of an "Input Block", in the "Output Section" of an "Output Block", in the "Global Section". In few words, they are legal everywhere except for the "NoCompile" block. Depending on their positions, they affect the involved nodelists only. ═══ 11.3.4.6.3.1. ArcExportMethod ═══ ArcExportMethod [,] ... Specifies the archive type(s) to be created for the exported file. is the archiver name as defined in Compress.Cfg. is the optional first letter to be used for variable archive extensions. Example: ArcExportMethod zip lh,H ═══ 11.3.4.6.3.2. BeforeArcExport/AfterArcExport ═══ BeforeArcExport AfterArcExport Commands to be run before/after archiving the exported file. can be any type of command (executable file, batch file, internal command, alias, etc.) and supports the %a (full archive name) and %f (name of the file to be compressed, no path) and is run from the directory where %f resides. WARNING: since is executed from the directory where the file to be compressed belongs, you might need to specify the location of the config files used by the programs invoked via . Example: AfterArcExport Hatch %a ═══ 11.3.4.6.3.3. ExportNeededBeforeKill ═══ ExportNeededBeforeKill Specifies that the exported file is needed by the "BeforeKillSource" command. ═══ 11.3.4.6.4. Export Example ═══ Export Example: NodeList nodelist.??? NodeDiff nodediff.??? ArcList nodelist.??? 2 ArcDiff nodediff.??? 5 ArcListDesc Fido Nodelist for day %d (%D), %a format ArcDiffDesc Fido Nodediff for day %d,(%D), %a format Export region25.??? 2:25 ArcExport region25.??? 1 ArcExportDesc Region 25 %D, %a format ArcExportMethod zip lh AfterArcExport Hatch %a Export region24.??? 2:24 ArcExport region24.??? 1 ArcExportDesc Region 24 %D, %a format ArcExportMethod zip Export Example to generate a joined list: NodeList nodelist.??? NodeDiff nodediff.??? ArcList nodelist.??? 2 ArcDiff nodediff.??? 5 ArcListDesc Fido Nodelist for day %d (%D), %a format ArcDiffDesc Fido Nodediff for day %d,(%D), %a format Export + megalist.Lst NodeList zonelist.??? NodeDiff zonediff.??? ArcList zonelist.??? 2 ArcDiff zonediff.??? 5 ArcListDesc Zonelist for day %d (%D), %a format ArcDiffDesc Zonediff for day %d,(%D), %a format Export + megalist.Lst ArcExport megalist.??? 1 ArcExportDesc MegaList, %a format ArcExportMethod zip lh ═══ 11.4. Compress Definition File ═══ COMPRESS DEFINITION FILE The file specified in the CompressCfg statement is a sequence of Archive definition blocks, each one starting with "Archiver" and ending with "End Archiver". You can find an example in the Compress.Cfg file included in the distribution pack. The order of the archive definition blocks within this file may be important: when trying to unpack a compressed file, the list of archivers is scanned in a reverse order. In the case of two archivers that use the same identification string (e.g. ARC and PAK), you must specify the archiver that can unpack both (PAK) after the other one (ARC). The compress.cfg file can be shared between DOS/NT and OS/2 applications: the "DOS" and "OS2" keywords are available to distinguish between the commands to be used under DOS/NT and OS/2. O.S. specific archivers or commands must be prefixed with the relevant keyword. IMPORTANT NOTE: The lines that begin with "DOS" or "OS2" are parsed by the DOS/NT and OS/2 versions respectively. If you need the OS/2 version to execute a DOS command, you MUST NOT use the DOS keyword: if you do, it will never parse that line; if you do not, it will execute the DOS command "normally", provided you have installed OS/2's Dos support. See the examples below. ═══ 11.4.1. Archiver ═══ Archiver Starts the Archive definition block. is the name used to identify this archiver. Example: Archiver ZIP ═══ 11.4.2. Extension ═══ Extension Specifies the default extension for the compressed files. Example: Extension ZIP ═══ 11.4.3. Ident ═══ Ident , is a decimal integer number representing the offset at which an archive identity marker must be present. Negative values can be used to indicate offsets from the END of a compressed file. -1 means "the last byte", -2 "the second last byte" and so on. is a series of hexadecimal figures which represent the bytes of the marker string that must be present at the specified offset of the archive file. Example: Ident 0,504b0304 ; "PK^c^d" ═══ 11.4.4. Add ═══ Add Specifies the command to add files to an archive. %a and %f are translated to the name of the archive and file to add. Example: Add zip -jk %a %f ═══ 11.4.5. Extract ═══ Extract Specifies the command to extract files from an archive. %a and %f are translated to the name of the archive and file to extract. Example: Extract unzip -qqnjC %a %f ═══ 11.4.6. View ═══ View This line is recognized and accepted for compatibility, but not used. ═══ 11.4.7. End Archiver ═══ End Archiver This statement is used to close a Archive definition. ═══ 11.4.8. Examples ═══ Examples Complete example 1 (you need OS/2 only): Archiver ZIP Extension ZIP Ident 0,504b0304 Add zip -jk %a %f Extract unzip -qqnjC %a %f View unzip -v %a End Archiver Complete example 2 (you need DOS only): Archiver ZIP Extension ZIP Ident 0,504b0304 Add pkzip -a %a %f Extract pkunzip -n %a %f View pkzip -v %a End Archiver Complete example 3 (you need both OS/2 and DOS): Archiver ZIP Extension ZIP Ident 0,504b0304 OS2 Add zip -jk %a %f DOS Add pkzip -a %a %f OS2 Extract unzip -qqnjC %a %f DOS Extract pkunzip -n %a %f OS2 View unzip -v %a DOS View pkzip -v %a End Archiver Complete example 4 (archiver to be used under DOS only): DOS Archiver ZOO DOS Extension ZOO DOS Ident 0,5a4f4f ; "ZOO" DOS Add zoo a: %a %f DOS Extract zoo e:O %a %f DOS View zoo v %a DOS End Archiver Complete example 5 (it's a DOS executable, to be used under DOS or OS/2 indifferently): Archiver ZOO Extension ZOO Ident 0,5a4f4f ; "ZOO" Add zoo a: %a %f Extract zoo e:O %a %f View zoo v %a End Archiver ═══ 12. TroubleShooting ═══ T R O U B L E S H O O T I N G ═══ 12.1. Extraction problem ═══ Extraction problem Problem: FastLst does not extract the correct nodelist/nodediff. Solution: Perhaps there is some nodelist/nodediff with corrupted file date. Check your "ArcPath", manually extract to the "InputPath" the required nodelist/nodediff and delete the archive (or reset its file-date so that it is similar to that of the enclosed file). FastLst will automatically rearchive the nodelist/nodediff if you use "ArcMethod"/"ArcDiffMethod", otherwise you can rearchive manually. ═══ 12.2. Out of Memory ═══ Out of Memory Problem: FastLst runs out of memory (Dos versions). Solution: - give more DPMI memory to FastLst - enable the DOS4GW virtual memory mode, using the DOS4GVM environment variable (e.g. for 16MB virtual allocation size: SET DOS4GVM=VirtualSize#16384). This works under real Dos only: if you are using OS/2 dos sessions, use a higher DPMI_MEMORY_LIMIT in the Dos settings. ═══ 12.3. Problems with Empty Phone entries ═══ Problems with Empty Phone entries Problem: Some program behaves oddly while accessing entries that contain an empty phone number. Solution: The problem might be caused by the cost that is assigned to empty-phone nodes (65535 by default). Try using the "CostNullPhone" global statement to give lower costs. Example: CostNullPhone 900 0 ═══ 12.4. Slow processing ═══ Slow processing Problem: FastLst works very slowly. Solution: Perhaps you are compiling a large nodelist or set of nodelists on a system with few MegaBytes of free physical RAM, so that the OS needs to extensively use virtual memory. Try using the "LinkOnDisk" statement in the configuration file. ═══ 12.5. System performance degradation ═══ System performance degradation Problem: FastLst loads the system excessively, so that other OS/2 tasks don't perform properly (OS/2 version). Solution: Use the "Priority Idle" statement in the configuration file, so that FastLst receives its time slices only when other processes with higher priority are idle. ═══ 12.6. I want maximum speed ═══ I want maximum speed Problem: I run FastLst while the communications are off, so I would like it to run as fast as possible even if it is in the background and other tasks are active (OS/2 version). Solution: Use the "Priority High 31" statement in the configuration file, so that FastLst receives the maximum priority for "non time-critical" processes. ═══ 12.7. Archived Diffs are not applied ═══ Archived Diffs are not applied Problem: FastLst does not apply the archived Diffs. Solution: Remember that "InputPath " is the default path for lists and diffs, while "ArcPath " is the one for archives. Please compare your Compress.cfg with the example one, check the paths and try the commands manually. Check the day-extensions and time-stamps of the relevant files. ═══ 12.8. Dos/32 DOS4GW exception ═══ Dos/32 DOS4GW exception Problem: The Dos/32 version of FastLst aborts with an exception from the Dos extender. Solution: Try booting with a "clean" config.sys and autoexec.bat (the Dos extender might be incompatible with some of your loaded drivers or TSRs. ═══ 12.9. Dial Scripts and VMODEM addresses ═══ Dial Scripts and VMODEM addresses Problem: How can I put script names or internet addresses in the place of a phone number ? Solution: You may use the "Phone" statement. Example: Let's suppose the following Modem Type table is defined: TypeDef X75 1 V34 2 VM 3 End You may use a Phone override of this kind: Phone 2:345/678 domain.com VM,CM 10 0 And a ModemTrans (for Binkley's VMODEM line): ModemTrans 0 ModemTrans 1 ModemTrans 2 ModemTrans 3 ATDT# ; Vmodem ═══ 12.10. Region and zone-level Export ═══ Region and zone-level Export Problem: How can I export a Region segment together with the zone-level entries ? Solution: The zone level entries have the Region/Net field equal to the zone number; you can use the Export statement in the following way: export MyR33.??? 1:1 2:2 2:33 3:3 4:4 5:5 6:6 ═══ 12.11. Support ? ═══ Support ? Problem: I cannot find the solution to my problems. Solution: - Try linking the APWORKS support echo - Try asking your local supporter - Try asking the author directly You can find the addresses in the ReadMe.1st file. ═══ 13. SHAREWARE ═══ S H A R E W A R E If you like this program and continue using it, you should pay the author for his work, as per the ShareWare concept of distribution. Please see LICENSE.DOC and REGISTER.DOC for information. Thank you for your interest in FastLst. ═══ 13.1. License.Doc ═══ ╔═══════════════╗ ║ ║ ║ F A S T L S T ║ ║ ║ ╚═══════════════╝ L I C E N S E P O L I C Y June 1997 This software (program and accompanying documentation) are: Copyright (c) 1992-1997 Alberto Pasquale, all rights reserved. DISTRIBUTION FORMAT This software is distributed in a locked RAR archive, with embedded authenticity-verification information. The distribution of modified archives, including those derived from the conversion to a different archiver, is explicitly prohibited. When the RAR extension is not accepted, you should either store the original RAR archive inside a different one (e.g. RAR inside ZIP) or get the self-extracting executable that is prepared by the author (available on ftp.bmtmicro.com/bmtmicro). S H A R E W A R E This software is distributed as ShareWare: you are granted the right to evaluate the program for a maximum of 30 days before paying the author. After the evaluation period, you are required to either register (see REGISTER.DOC) or stop using the program. You are encouraged to distribute the original and unmodified package freely, in any form and on any media, provided you do not charge any fee for the program itself. This package could be included in CD-ROM collections, subscription download areas, BBS packages, provided it remains in its complete and unmodified original archive. In any case, the user must register with the author after the evaluation period. IMPORTANT: the registration is NOT a trade transaction, it is to be considered as payment of royalties; therefor the registration key is personal and NOT transferrable. DISCLAIMER This software is provided on an "as is" basis without warranty of any kind, expressed or implied, including but not limited to the implied warranties of merchantability and fitness for a particular purpose. The person using the software bears all risk as to its quality and performance. The author will not be liable for any special, incidental, consequential, indirect or similar damages due to loss of data or any other reason. ═══ 13.2. Register.Doc ═══ ******* ** **** ****** **** **** ****** ** * **** ** ** * ** * ** ** ** * ** * ** * ** ** ** ** ** ** ** **** ** ** **** ** ** **** ** ** * ****** ** ** ** * ** ** ** ** ** ** ** ** ** ** ** ** ** **** ** ** **** **** ******* **** **** (C) Copyright 1992-1997 by Alberto Pasquale A L L R I G H T S R E S E R V E D For licensing terms and disclaimer, see LICENSE.DOC. This program required a lot of work: by registering you will support me in developing this and other similar products. You will receive a registration Key that removes the initial 2 second pause and makes the program show "Registered To: " instead of the registration request banner. The registration is guaranteed valid for all future minor updates and, in any case, for all versions that will be released in a period of 2 years after registration. After this period, an upgrade fee might possibly be required in the case of major new releases. The registration key works FOREVER with the current version of the program for ANY platform: you do not have to pay anything in the case you change your operating system. ╔═════════════════════════════════════════════════════════════╗ ║ ║ ║ Registration fee: US$ 25, DEM 35, ITL 30,000 or (see below) ║ ║ ║ ╚═════════════════════════════════════════════════════════════╝ ═══ 13.2.1. How to Register ═══ HOW TO REGISTER Registering is quite easy; you can register: - Directly with me by cash, check or international (not domestic !) postal money order. - via local Registration Site in Canada, Germany, UK. - via BMT Micro (Wilmington, NC, USA), by credit card, money order, cashiers check, personal check, German or British currency. - via PsL (Houston, TX, USA), by credit card. The registration key will be delivered via internet e-mail or crash netmail depending on availability; fax and postal mail will be used only in case of problems. Should you not receive your registration key in a reasonable time, please feel free to contact me. Please allow at least 3 weeks for response to international airmail. Please address your requests, complaints, suggestions to: Alberto Pasquale of 2:332/504@fidonet alberto.pasquale@interbusiness.it 2:332/504@fidonet +39-59-246112 X75 V120 X2 V34+ V32T H16 FAX: +39-59-246113 ═══ 13.2.1.1. Author's ═══ Hot to register directly with the author You have to send the registration information and money to: Alberto Pasquale Viale Verdi 106 41100 Modena Italy ═══ 13.2.1.1.1. Cash ═══ Cash: Just put the (accurately hidden) banknotes (US$ 25, DEM 35, ITL 30,000) together with Register.For in an envelope. If you do not have US dollars, German marks or Italian liras and do not like going to the bank, you can send the equivalent in your currency, provided it is commonly exchangeable. ═══ 13.2.1.1.2. Check ═══ Check: Just put the check (accurately hidden) together with Register.For in an envelope. Please read carefully the following instructions: - Eurocheque: ITL 30,000 (thirty thousand). - Italian check: 30.000 lire - Other (bank) checks: US$ 25, DEM 35 or equivalent. ATTENTION: NO Postal Checks please. ═══ 13.2.1.1.3. Postal Money Order ═══ Postal Money Order: Just go to the post office and ask for an _INTERNATIONAL_ postal money order. It is best to go to a major post office, since minor ones are generally not used dealing with international money orders. Usually you can choose whether to use your currency or the recipient's. Please be sure to specify the necessary registration information in the "sender message" field or send Register.For separately to the author. - International money order in italian liras: ITL 30,000 (thirty thousand). - International money order in your currency: US$ 25, DEM 35 or equivalent. - Italian money order "vaglia": 30.000 lire. IMPORTANT: Please DO NOT send me normal "domestic" postal money orders, since they are not payable outside of your country; you must use INTERNATIONAL postal money orders. If you would like to receive the key soon, you can FAX me (+39-59-246113) the receipt of the postal money order together with REGISTER.FOR. ═══ 13.2.1.2. Local Registration/Support sites ═══ Local Registration/Support Sites: If you choose this way, you will have contacts with the local supporter only: you will send him the money and registration form; in a few days you will receive your key. ═══ 13.2.1.2.1. Canada ═══ Canada: Mary-Anne Wise 58-771 Columbia St. New Westminster, BC V3M 1B6 Fidonet: 1:153/831 Internet: MWISE@bc.sympatico.ca Reg. Fee: CDN 32.50 Methods of payment: cheque, money order ═══ 13.2.1.2.2. Germany ═══ Germany: Roland Schiradin Stockbornstr. 10 65343 Eltville Germany Fidonet: 2:2454/169 Mail Only Internet: schiradi@tap.de Reg. Fee: DEM 35 He has the APWORKS support echo and TIC file-areas for my programs available. Besides he can provide you with information about the nodes carrying APWORKS in Germany. He has the latest version of ApWorks programs available for F/R with the same magics listed in Readme.1st. ═══ 13.2.1.2.3. United Kingdom ═══ United Kingdom: Vince Coen Applewood House Epping Road Roydon, Harlow Essex, CM19 5DA, UK Fidonet: 2:257/609 Reg. Fee: GBP 15.00 Payment can be in Cash, Cheque (bankers card number on order form please), EuroCheck, Credit Card or direct to my bankers. Payment MUST be in Pounds Sterling. For payment through the bank: Bank: First Direct. Sort code: 40-47-86. Account: 00449334 Account name: Vincent Coen. Payment reference must include Sysop name and node number. For payment via Visa/Mastercard/Eurocard there is a 5.50% surcharge which will add 0.83 to the cost of 15.00, i.e. 15.83 Pounds Sterling. Credit Card details needed: Name and address of card holder, Card number and card expiry date. The latest version of ApWorks programs are available for F/R with the same magics listed in Readme.1st. ═══ 13.2.1.3. BMT Micro ═══ How to register with BMT Micro You have to fill in the BmtMicro.For registration form and send it (or equivalent information) to BMT Micro. The registration fee is US$ 25. ATTENTION: for any question regarding the program, its registration, support etc, you must contact me directly. Please contact BMT Micro to order ONLY. Usually your key will be delivered within 2 business days. In certain holiday periods (Christmas, Easter, end of July, first half of August) there might be some delay (a few days for Christmas or Easter, a couple of weeks in July/August). If you think your order is particularly late, please contact me first ! Mail Orders To: BMT Micro PO Box 15016 Wilmington, NC 28408 U.S.A. Voice Orders: 8:00am - 7:00pm EST (-5 GMT) (800) 414-4268 (Orders only) (910) 791-7052 (Orders / Order Inquires) Fax Orders: (800) 346-1672 24 hours, 7 days a week (910) 350-2937 24 hours, 7 days a week Online Orders via BBS: (910) 350-8061 10 lines, all 14.4K (910) 799-0923 28.8k line On the Web: http://www.bmtmicro.com http://www.os2ss.com http://www.frankson.aus.net/bmtaust/ Ordering and general ordering questions: Via AOL: bmtmicro via MSN: bmtmicro Via Prodigy: HNGP66D via Compuserve: 74031,307 via Internet: orders@bmtmicro.com telnet@bmtmicro.com Credit cards: Visa, Mastercard, Discover, American Express, Diners Club, Carte Blanche. They also accept money orders, cashiers checks, personal checks. Personal checks are subject to clearance. US Currency is welcome (only by registered mail, return receipt requested). BMTMICRO ORDERING FROM INSIDE GERMANY ONLY ========================================== Persons in Germany may also transfer funds into the BMTMICRO account with Deutsche Bank. Once the money is deposited you may either fax a confirmation to BMTMICRO with proof of deposit or wait until Deutsche Bank notifies them of the transaction (usually 10-18 business days). Account information is as follows: Deutsche Bank / Frankfurt Branch EmpfДnger: Thomas Bradford / BMT Micro Konto-Nummer: 0860221 Bankleitzahl: 500-700-10 When you make the transfer, be sure to put your name and the program you are registering on the transfer. Current exchange rates can be obtained by sending an email to dm_to_us@bmtmicro.com. An automated reply will return todays exchange rates. It is very important that you send BMTMICRO a completed order form by either email or fax if you deposit money into this account for a registration. Fill the order form out as usual except in the credit card number field put "DEUTSCHE BANK". They will file the order and use it to match against the deposit information they receive from the bank. IMPORTANT! ---------- When you email BMTMICRO your order form, they will reply with an acknowledgement. If you do not get an acknowledgement within 24 hours please send your order again in case it was lost. This extra bit of caution can save a lot of confusion. If you are concerned that your order is taking too long to process, feel free to check with BMTMICRO about the status of your order. It's important to all of us that you feel safe doing business with BMTMICRO and please feel free to suggest ways we can improve our service to you. ═══ 13.2.1.4. PsL ═══ How to register with PsL (by credit card) You must fill in the PsL.Crd and Register.For forms; then you must send BOTH of them to PSL directly (they will forward Register.for information to me). You can order with MasterCard, Visa, American Express or Discover Card: the charge is US$ 25. ATTENTION: you MUST NOT send me any information about your credit card. If you do, I am NOT allowed to forward your credit card info to PSL. ATTENTION: for any question regarding the program, its registration, key delivery etc, you must contact me directly. You must contact PSL to order ONLY. PSL will notify me your order within one business day and I will usually send your key by e-mail or crash netmail within 24h, so if you order by fax or phone, you should usually receive your key within 2 business days. ATTENTION: In certain "holiday" periods (Christmas, Easter, end of July, first half of August) there might be some delay (a few days for Christmas or Easter, a couple of weeks in July/August). If you think your order is particularly late, please contact me first ! ATTENTION: It may happen that the PSL operator asks you for your preferred diskette format. You must be aware that this may be "standard" PSL procedure, but I will send you a key ONLY (via e-mail, crash netmail, fax or letter), since you already have the program. IMPORTANT: Please, be sure to always give PsL the address where you want to receive your key: e-mail address, fidonet name _and_ address, fax number, and/or complete postal address. If you are not in the fidonet nodelist and I don't receive enough information, I will be forced to send you an air-mail letter (2-3 weeks for delivery). In the case of doubts, you can send the Register.For to me too, by e-mail, crash netmail or fax. Credit card registrations may be made by the following methods (please be sure to always include all the necessary information from BOTH Register.For and PsL.Crd). -- PsL on the Web: http://www.pslweb.com -- Phone PsL at: 800-2424-PsL (800-242-4775) Ext. 11471 (USA) +1-713-524-6394 Ext. 11471 (international) PSL Office Hours: 8:00 a.m. to 6:00 p.m. CST Monday->Friday Be sure to have BOTH Register.For AND PsL.Crd available to give order information to PSL. First of all, mention the PSL part number 11471. -- FAX PsL at +1-713-524-6398 -- Email PsL at 11471@pslweb.com -- Write PsL at: The Public (software) Library P.O. Box 35705 Houston, TX 77235-5705, USA Please, let me insist one more time: ╔═══════════════════════════════════════════════════════╗ ║ The above numbers are for ORDERS ONLY. ║ ║ Any question about the status of the shipment of the ║ ║ order (registration key), registration options, ║ ║ product details, technical support, etc, must be ║ ║ directed to the author, at the address given above in ║ ║ this documentation. ║ ╚═══════════════════════════════════════════════════════╝ ═══ 13.2.2. How to fill in Register.For ═══ INSTRUCTIONS FOR COMPILING REGISTER.FOR To avoid errors in the key, please PRINT. Thank you very much for your support ! ═══ 13.2.2.1. Name ═══ Name: Your complete name. Example: John Doe ═══ 13.2.2.2. Reg ═══ Reg: The registration string you want displayed by the program. You can use any character in the IBM set (including special national characters above ASCII 127; if you do not use code page 437 (USA), please specify the code numbers) and you can use lowercase and uppercase at your preference. Maximum length: 63 characters. Usually it should be the same as your name, in which case you can omit this field. ═══ 13.2.2.3. e-mail to ═══ e-mail to: This is your internet e-mail address, if available. ═══ 13.2.2.4. Netmail to ═══ Netmail to: You have to specify the complete destination field for the netmail message. Examples: John Doe of 1:200/300.4 John Doe of 1:200/300.0 ═══ 13.2.2.5. Crash to ═══ Crash to: You have to specify the data necessary for crashing the message. Usually this should be your system or your Boss (if you are a point). I will call as 2:332/504@fidonet. - If your system (or your Boss) is 24h and it is in the fidonet nodelist, you can omit this field. - If your system is not 24h, please give me a 24h system to which I can crash your netmail for routing. - If the system in consideration is not in the fidonet nodelist, please add its complete phone number and modem type. Examples: 1:200/400@fidonet 9:800/700@ABCnet +1-703-4567 V34, ISDNC ═══ 13.2.2.6. Fax ═══ Fax: This is your (24h) fax number, if any. ═══ 13.2.2.7. Address ═══ Address: The postal address is the last opportunity of sending you the key. ═══ 13.2.2.8. Version ═══ Version: You should indicate BOTH the version number of the program you are registering AND the Operating System. Example: ver. 2.00 OS/2 This is not essential and is included for statistical purposes only (the key works with all current versions). ═══ 13.2.2.9. Notes ═══ Notes: You can send me your wish list for future versions, or anything you like. ═══ 13.2.3. How to fill in BmtMicro.For ═══ INSTRUCTIONS FOR COMPILING BMTMICRO.FOR The first section contains data necessary for BMT Micro (your name, company, address, phone and fax). The second section contains the "Registration Information" that will be relayed to me so that I can build the key and deliver it to you. The third section contains the product and cost indication. The registration is valid for any operating system. The forth section contains data for Credit Card payment. To avoid errors, please PRINT. Thank you very much for your support ! ═══ 13.2.3.1. Reg ═══ Reg: The registration string you want displayed by the program, ASCII characters only (<127). Maximum length: 63 characters. ═══ 13.2.3.2. e-mail to ═══ e-mail to: This is your internet e-mail address, if available. ═══ 13.2.3.3. Netmail to ═══ Netmail to: You have to specify the complete destination field for the netmail message. Examples: John Doe of 1:200/300.4 John Doe of 1:200/300.0 ═══ 13.2.3.4. Crash to ═══ Crash to: You have to specify the data necessary for crashing the message. Usually this should be your system or your Boss (if you are a point). I will call as 2:332/504@fidonet. - If your system (or your Boss) is 24h and it is in the fidonet nodelist, you can omit this field. - If your system is not 24h, please give me a 24h system to which I can crash your netmail for routing. - If the system in consideration is not in the fidonet nodelist, please add its complete phone number and modem type. Examples: 1:200/400@fidonet 9:800/700@ABCnet +1-703-4567 V34, ISDNC ═══ 13.3. Register.For ═══ FastLst Registration Form (Please PRINT) See Register.Doc for instructions: Date: __/__/__ Name: _________________________________________________________ Reg.: _________________________________________________________ e-mail to: ____________________________________________________ Netmail to: ___________________________________________________ Crash to: _____________________________________________________ Fax: __________________________________________________________ Address: ______________________________________________________ ______________________________________________________ ______________________________________________________ Version: _.___ OS/2 ( ) W32 ( ) DOS32 ( ) Notes: ________________________________________________________ _______________________________________________________________ _______________________________________________________________ ═══ 13.4. BmtMicro.For ═══ BMT Micro FastLst Registration Form ***************************************** * DO NOT SEND this form to the author ! * ***************************************** See Register.Doc for instructions, please PRINT: Date: __/__/__ Name: __________________________________________________________ Company: _______________________________________________________ Address: _______________________________________________________ ________________________________________________________________ City: ______________________ State/Province: _________________ Country: ___________________________ Postal Code: ______________ Phone: _________________________________________________________ Fax: ___________________________________________________________ REGISTRATION INFORMATION Reg.: __________________________________________________________ e-mail to: _____________________________________________________ Netmail to: ____________________________________________________ Crash to: ______________________________________________________ Product: FastLst (by Alberto Pasquale) Price: US$ 25.00 North Carolina residents, please add 6% sales tax: +US$ __.__ Total: US$ __.__ For credit card payment only: Circle one: VISA / Master / Discover / AMEX / Diner's Club Credit card number : _______________________________________ Expiration date : ___/___ Authorization signature: _______________________________________ ═══ 13.5. PsL.Crd ═══ FastLst Credit Card Registration Form PSL Part number 11471 ***************************************** * DO NOT SEND this form to the author ! * ***************************************** Please read carefully Register.Doc for instructions. Date _________________________ Cardholder's name, exactly as it appears on the credit card: _____________________________________________________ [Company:] _____________________________________________________ Billing address for the card: ___________________________________________________________ ___________________________________________________________ ___________________________________________________________ Payment by: ( ) MasterCard ( ) Visa ( ) American Express ( ) Discover Card Card #: _______________________________ Exp. Date: __________ Signature of cardholder: _______________________________________ ═══ 14. Sample config files ═══ Some example configuration files ═══ 14.1. Minimal Configuration ═══ ; FastLst 2.00, (c) Copyright 1992-1997 Alberto Pasquale ; FastLst.Cfg Example ; Minimal configuration ; RegKey YourRegistrationKey CompressCfg d:\flst\compress.cfg InputPath d:\flst\nodelist ArcPath d:\flst\arc V7BugFix Dial ; for Europe 39-59- / 5 0 ; country and district code 39- 0 60 0 - 00 300 0 End ; For North America (see the doc for more details !): ; Dial ; LocalValues 1-414- / 0 ; country and area code ; LocalExchanges 231 232 233 235 236 424 ; 1-414- 1- 25 ; 1- 1- 50 ; - 011 250 ; End Version7+ v7 NODEX SYSOP FidoUserLst ArcMethod zip ArcDiffMethod zip PasswordFile d:\flst\fastlst.pwd NodeList nodelist.??? NodeDiff NODEDIFF.??? ArcList nodelist.??? 1 ArcDiff nodediff.??? 2 ArcListDesc Fido Nodelist for day %d (%D), %a format ArcDiffDesc Fido Nodediff for day %d (%D), %a format NodeList REGION.033 2 ; Region 33 in zone 2 ArcList region33.??? ArcListDesc Region 33 (Italy) fido nodelist, %a format NodeList Apw_Pnts.Lst ; Points in "Boss," format ═══ 14.2. Full configuration ═══ ; FastLst 2.00, (c) Copyright 1992-1997 Alberto Pasquale ; FastLst.Cfg Example ; Full configuration ; See the documentation for more details ! ; RegKey YourRegistrationKey Priority Idle StatusLog d:\flst\fastlst.log CompressCfg d:\flst\compress.cfg InputPath d:\flst\nodelist ; plain nodelists ArcPath d:\flst\arc ; archived nodelists/nodediffs ArcDate Creation ; MultiLineDesc 31 KillAfter KillSource V7BugFix NoRedir CostNullPhone 1000 0 ; costs for nodes with empty phone CostVerbatimPhone 10 0 ; costs for Verbatim phones Dial ; for Europe LocalValues 39-59- / 0 0 ; country and district codes LocalExchanges 21 22 ; urban exchanges LocalExchanges 23 24 39-59- / 5 0 ; remaining district #s 39- 0 60 0 ; remaining domestic #s 43- 0043- 100 0 200 0 ; some international #s 32- 0032- 100 0 200 0 ; with higher digital costs 45- 0045- 100 0 200 0 33- 0033- 100 0 200 0 49- 0049- 100 0 200 0 44- 0044- 100 0 200 0 34- 0034- 100 0 200 0 46- 0046- 100 0 200 0 41- 0041- 100 0 200 0 1- 001- 200 0 400 0 - 00 300 0 600 0 ; remaining international #s End ;Dial ; for America, see the Docs for further details ; LocalValues 1-510- / 0 ; LocalExchanges 224 225 226 227 247 249 252 264 276 ; LocalExchanges 278 293 317 353 354 416 417 ; ; LocalValues 1-408- 1-408- 0 ; LocalExchanges 232 251 254 258 259 262 263 272 276 ; LocalExchanges 321 324 325 383 428 432 433 434 ; ; LocalValues 1-415- 1-415- 0 ; LocalExchanges 233 234 321 322 323 324 325 326 327 ; LocalExchanges 328 329 354 424 462 473 493 ; ; 1-510- / 25 ; 1-408- 1-408- 25 ; 1-415- 1-415- 25 ; 1- 1- 100 ; - 011 2000 ;End TypeDef X75 1 Digital ISDNC 1 Digital V120 2 Digital V120H 2 Digital V120L 3 Digital V34 4 Analog VFC 5 Analog V32T 6 Analog H16 7 Analog V32B 8 Analog ZYX 8 Analog ; ZYX implies V32B Z19 8 Analog Z16 8 Analog H14 9 Analog V32 10 Analog HST 11 Analog VM 200 100 0 -\- .* vV ~\~ ": " ; VMODEM End ; FlagDef ; V42B AB ; A & B user-flags set on nodes with V42B flag ; ENC D ; D user-flag set on nodes with ENC flag ; End MsgLogArea d:\bbs\mail\net -$ MsgRemArea d:\bbs\mail\net -$ MsgSize 60000 MsgFromNode 2:332/504 MsgToNode 2:332/504 MsgTo Alberto Pasquale MsgAttr P ;FidoTxt ;FidoPrn Version7+ \bbs\v7 NODEX SYSOP FidoUserLst LinkOnDisk LogStats ArcMethod zip Lh ArcDiffMethod zip LH ArcExportMethod zip lh PasswordFile d:\flst\fastlst.pwd Phone 2:332/504 39-59-246112 Cost 2:332/504 500 0 Phone 2:332/501 alberto.com VM,CM 0 NodeList zonelist.??? NodeDiff alldiff.??? ArcList zonelist.??? 2 ArcDiff alldiff.??? 5 ArcListDesc Non-Fido Nodelist for day %d (%D), %a format ArcDiffDesc Non-Fido Nodediff for day %d (%D), %a format NodeList region24.??? 2 ; Region 24 in zone 2 ArcList origr24.??? 1 ; Keep 1 origr24.l?? ArcListDesc Original Region 24 Nodelist for day %d (%D), %a format NodeList points24.??? GermanPointList NoPointLstPhone NodeDiff pr24diff.??? ArcList points24.??? 3 ArcDiff pr24diff.??? 5 ArcListDesc R24 PointList for day %d (%D), %a format ArcDiffDesc R24 PointDiff for day %d (%D), %a format NodeList ptlist.??? ; PointList in "Boss," format ArcList ptlist.??? 1 ; Keep 1 ptlist.l?? ArcListDesc Italian Point List for day %d (%D), %a format NodeList nodelist.??? MsgRem SUE ; log comments beginning with S, U or E NodeDiff NODEDIFF.??? ArcList nodelist.??? 1 ArcDiff nodediff.??? 2 ArcListDesc Fido Nodelist for day %d (%D), %a format ArcDiffDesc Fido Nodediff for day %d (%D), %a format Export region25.??? 2:25 ArcExport region25.??? 1 ArcExportDesc Region 25 %D, %a format NodeList REGION.033 2 ; Region 33 in zone 2 MsgRem SUE ArcList region33.??? ArcListDesc Region 33 (Italy) fido nodelist, %a format NodeList hub.500 2:332 33 ; Hub 500 (zone 2, net 332, region 33) NodeList MyNodes.Lst ; private list NodeList Apw_Pnts.Lst ; Points in "Boss," format Version7 \bbs\v7 NODEX2 SYSOP2 ; let's make a second, shorter, nodelist PasswordFile d:\flst\fastlst.pwd NodeList nodelist.??? NodeList REGION.033 2 ; Region 33 in zone 2 ═══ 14.3. Compress Definition ═══ ; Example Compress.Cfg definition file ; ; If you are already using a Compress.Cfg file with other programs, ; you do not need this one. ; Just make sure you use the correct switches to avoid case mismatch ; with case sensitive archivers, as ZIP/UNZIP. ; ; The DOS prefix is for the W32 version too. Archiver ARC Extension ARC Ident 0,1a OS2 Add arc aw5 %a %f DOS Add pkpak -oct a %a %f OS2 Extract arc ew %a %f DOS Extract pkunpak /r %a %f OS2 View arc vw %a DOS View pkpak v %a End Archiver DOS Archiver PAK DOS Extension PAK DOS Ident -2,fe DOS Add pak a %a %f DOS Extract pak e /wn %a %f DOS View pak v %a DOS End Archiver Archiver ZIP Extension ZIP Ident 0,504b0304 OS2 Add zip -jk %a %f ; store in uppercase DOS Add pkzip -a %a %f OS2 Extract unzip -qqnjC %a %f ; case insensitive extract DOS Extract pkunzip -n %a %f OS2 View unzip -v %a DOS View pkzip -v %a End Archiver Archiver LH Extension LZH Ident 2,2d6c68 ; "-lh" OS2 Add lh a %a %f DOS Add lha a /m %a %f OS2 Extract lh x %a %f /o DOS Extract lha e /m %a %f OS2 View lh l %a /v /o DOS View lha l %a End Archiver Archiver ARJ Extension ARJ Ident 0,60ea DOS Add arj a -e+ %a %f OS2 Extract unarj e %a %f DOS Extract arj e -n %a %f OS2 View unarj l %a DOS View arj l %a End Archiver Archiver RAR Extension RAR Ident 0,526172211a0700 Add rar a -ee -md64 -ep -y -std -c- %a %f Extract rar e -o- -y -std -c- %a %f View rar v -y -std -c- %a End Archiver ═══ 15. Version 7 Plus: technical information ═══ Nodelist Version 7+ Version 0, May 30 1997 Alberto Pasquale, 2:332/504@fidonet.org Thomas Waldmann, 2:2474/400@fidonet.org TOPIC A new nodelist standard that remains FULLY compatible with V7 applications while adding new features and resolving the major shortcomings of V7. ═══ 15.1. Why V7+ ? ═══ 0. Why V7+ ? ============ V7 is a commonly adopted standard for a "nodelist database" (often V7 is also called a "nodelist index", but this is only half of the truth - *.NDX is the index, but *.DAT is some sort of database file). V7 uses B-tree indices for sysop names and system addresses and is really FAST. Many software uses V7 and a totally different standard maybe would not get adopted by programmers. But V7 has a great drawback: it currently does not put all information that is contained in the "raw" nodelist into the V7 database. So if you use V7, you do NOT have all nodelist information that you maybe WANT to use (e.g. it does not support U,Txy (FSC-0062) and other new flags, some characters get "lost" due to the "packing" algorithm used etc.). This drawback will be solved with V7+ - any thing that is present in a raw nodelist will also be present in the V7+ database - no information is lost. V7+ also introduces a Phone Index (useful for CID lookup) and a whole set of "links" that allow to move through the Fidonet structure: - Ring of "same sysop" entries - Ring of "same phone" entries - Pointer to "first downlink" - List of "same downlink level" - Full Region and Hub information Besides V7+ introduces a semaphore method to avoid collisions between applications and the compiler. ═══ 15.2. Naming Convention ═══ 1. Naming Convention ==================== The base name is user specified; from here on it will be referred to as . Files already used by V7, that are also used by V7+: .DAT The V7 / V7+ data file. V7+ remains fully compatible with V7, but adds a new field (8 hex digit pointer to the DTP entry) at the end of the packed data. .NDX Traditional B-tree address index. .SDX Traditional B-tree sysop index (case insensitive). For V7 compatibility, both compilers and applications MUST be able to use SYSOP.NDX instead of the default .SDX. V7+ specific files: .DTP V7+ Data file, contains complete nodelist information and compiler-generated links. .PDX B-tree Phone index (case insensitive), to be used just as .SDX. The application that finds .DTP can assume that a V7+ nodelist is available. It is the user responsibility to delete old files if downgrading. A compiler in V7+ mode MUST generate all the above files by default (no need to specify anything more than "Version7+" and ). ═══ 15.3. V7 Database File (.DAT) ═══ 2. V7 Database File (.DAT) ================================= ═══ 15.3.1. Old structure and procedure ═══ 2.1. Old structure and procedure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct _vers7 { short Zone; // Zone number short Net; // Net number short Node; // Node number short HubNode; // If a point, this is point number word CallCost; // phone company's charge word MsgFee; // Amount charged to user for a message word NodeFlags; // set of flags byte ModemType; // Modem type byte Phone_len; // length of phone number (not packed) byte Password_len; // length of password (not packed) byte Bname_len; // length of system name (unpacked) byte Sname_len; // length of Sysop's name (unpacked) byte Cname_len; // length of City's name (unpacked) byte pack_len; // total length of packed data byte BaudRate; // baud rate divided by 300 }; Accessing V7 data is currently done like this: 1. find the stuff in the index - result is the "datpos" value - the offset into the .DAT file 2. Seek to offset into the .DAT file 3. Read sizeof(struct _vers7) bytes out of the .DAT file into a variable of type struct _vers7 4. Read the next bytes out of the .DAT file -> Phone Number 5. Read the next bytes out of the .DAT file -> Password 6. Read the next bytes out of the .DAT file -> some "packed" data 7. Unpack the "packed" data 8. First bytes of the unpacked data contain the System's (BBS') name 9. Next bytes of the unpacked data contain the Sysop's name 10. Next bytes of the unpacked data contain the City's name Data layout in the .DAT file is like that: <_vers7 struct> > ═══ 15.3.2. New structure and procedure ═══ 2.2. New structure and procedure ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ struct _vers7 is NOT changed: both indexed and sequential accesses are guaranteed compatible with V7. There's only a slight addition in the packed data, see below. Accessing V7/V7+ data should be done like this: 1. | ... | 10. | all the same as described in section 2.1 (compatibility!) 11. Check if there are 8 hex digits at the end of the packed data, after ++ bytes (see steps 7..10). In a V7+ nodelist, you should _always_ find these 8 hex digits at the end of the packed data, BUT a V7 nodelist editor may have removed them from modified entries. Applications MUST be able to handle the "missing 8 hex digits" situation as a normal condition and proceed as possible with the simple V7 data (some message signalling the situation may be issued, abnormal termination is unacceptable behaviour). If the 8 hex digits are found, they represent an offset into the new .DTP file. Applications MUST ignore any data possibly following the 8 hex digit pointer. Due to the V7 base-40 3:2 packing algorithm, the compilers have to pad the data to be compressed so that its length is a multiple of 3: it is recommended that the space (ASCII 0x20) is used. 12. Seek into .DTP to the offset you got in step 11. 13. Read/Process .DTP fields as described in section 3. So the new data layout in the .DAT file is like that: <_vers7 struct> <8-hex-digit-offset into .DTP> > ═══ 15.4. .DTP file layout ═══ 3. .DTP file layout ========================== Let's define some glossary: byte 8 bit unsigned integer word 16 bit unsigned integer (LSB first) dword 32 bit unsigned integer (LSB first) The .DTP file has the following layout:
File header Entry for first compiled system Entry for second compiled system Entry for third compiled system ... ═══ 15.4.1.
═══ 3.1.
~~~~~~~~~~~~~
has the following layout: Miscellaneous Information for Compatibility Link to top level fidonet hierarchy ═══ 15.4.1.1. Structure ═══ 3.1.1. Structure ~~~~~~~~~~~~~~~~~~~~~~~~~~ struct _DTPCtl { word size; // Size of this control structure byte Version; // Version of DTP file byte AllFixSize; // sizeof (_DTPAllLnk) byte AddFixSize; // sizeof (_DTPNodeLnk) }; size: This structure may be expanded in the future, so size is provided to allow compatible positioning on the following record. Version: This is the V7+ Version, currently 0. The compatibility towards previous versions is guaranteed, so correctly behaved applications will have no problems dealing with newer versions of V7+. When new features will be added, new applications will be able to check for the version level of the V7+ database, while old ones will remain compatible. The check will be "if Version >= n then ...". AllFixSize: This is the size of the fixed-length structure associated with ANY system in the nodelist. It is provided to allow compatible positioning on the following field, in the case of future extensions. AddFixSize: This is the size of the fixed-length structure associated with Nodes only (no points) and with . It is provided to allow compatible positioning on the following field, in the case of future extensions. ═══ 15.4.1.2. ═══ 3.1.2. ~~~~~~~~~~~~~~~~ V7+ has pointers to link the entire fidonet structure, from the top coordinators to the points. The .DTP header contains the link to the first (in zone/region/net/hub/node/point order) "top level" system found in the nodelist, usually ZC1. struct _DTPNodeLnk { word ndowns; // number of systems in lower level dword FlOfs; // DAT offset of "Lower Fido Level" }; ndowns: The number of direct downlinks; in this case it is the number of "top level" systems (systems that do not have uplinks in the nodelist). Usually it's the number of ZCs. Please note that if you have included a Region segment and the corresponding Zone is not included in other nodelists compiled to the same .*, this RC will be a "Top Level" system. The same happens in the case of lower level systems that are "orphans" of the upper coordinator. FlOfs: Offset into .DAT for the first direct downlink; in this case it's usually ZC1. ═══ 15.4.2. ═══ 3.2. ~~~~~~~~~~~~ This is the .DTP entry for each and every compiled system, pointed to by the 8-hex-digit offset found at the end of the _vers7 packed data. The layout is: Fixed size info (see
) word (size of following raw-line) variable size raw nodelist line This layout may be expanded in the future, both in the fixed-length and variable-length sections. Please, always use the size information found in the
to remain compatible with future V7+ extensions. ═══ 15.4.2.1. ═══ 3.2.1. ~~~~~~~~~~~~~~ The layout is: Common to all entries [] Not present for Points ═══ 15.4.2.1.1. ═══ 3.2.1.1. ~~~~~~~~~~~~~~~~~~~ The following structure is used for all the systems in the nodelist. struct _DTPAllLnk { word Region; // Region word Hub; // Hub dword SOfs; // DAT offset of next Same SysOp entry dword POfs; // DAT offset of next Same Phone entry dword FeOfs; // DAT offset of next "Equal Fido Level" byte Sn; // Number (base 0) of SysOp entry (ADR order) byte Pn; // Number (base 0) of Phone entry (ADR order) }; Region: Region number, 0 if none. Hub: Hub number, 0 if none. Please note that the "NodeHub" field of _vers7 may not always be the same as this one, not only because it is absent for points, but also because the compiler may infer the Hub from other nodelist entries while linking .DTP. DO NOT USE NodeHub in _vers7 for reliable Hub information. SOfs: Offset into .DAT for next system with the same SysOp name (in order of Address). 0xffffffff if none. This is a RING link, that is the last entry points to the first one. POfs: Offset into .DAT for next system with the same Phone number (in order of Address). 0xffffffff if none. This is a RING link, that is the last entry points to the first one. FeOfs: Offset into .DAT for next system at the same "fidonet level", that is with the same direct uplink/coordinator. 0xffffffff if none. This is a LIST link, that is the last entry points nowhere (0xffffffff). Please note that "equal level" systems are not necessarily all of the same coordination level (all HCs or RCs etc.). For example a ZC may have as direct downlinks (linked with FeOfs between one another): - his points (usually administrative entries should not have points, but it may happen), - Independent nodes in the Zone - Independent HCs in the Zone - Independent NCs in the Zone - RCs in the zone Sn: Number of same-sysop entry (0 based). 0xff if no link available. Please do NOT use Sn to check for links, use SOfs instead. Pn: Number of same-phone entry (0 base). 0xff if no link available. Please do NOT use Pn to check for links, use POfs instead. When you are looking for a SysOp or Phone that has multiple entries in the index, you get one and then you follow the links (SOfs, POfs) through all the remaining entries. Since the first entry (got from the index) may be in the middle of the "Ring", you can use Sn and Pn to know how many "lower" entries you will find. This may be useful for keeping the "Address order" while gathering all the information throughout the RING. Please note that some "common" entries (as "-Unpublished-" for the phone number), may have more than 254 links; so be aware that Sn and Pn may (under exceptional conditions) overflow, arrive at 0xff and restart from 0x00. This should be no concern when doing a normal lookup, but "statistical programs" that list all the Rings must be careful. The proper way to check whether you have finished the RING is to check the new SOfs/POfs against the first encountered one; Sn/Pn should be used for reference only. ═══ 15.4.2.1.2. ═══ 3.2.1.2. ~~~~~~~~~~~~~~~~~~~ The following structure is absent for points, since they do not have downlinks. It's the same structure used in the
for . struct _DTPNodeLnk { word ndowns; // number of systems in lower level dword FlOfs; // DAT offset of "Lower Fido Level" }; ndowns: The number of direct downlinks. It includes the lower level coordinators and all the systems that, for some reason, are orphans of the upper coordinator (not included in compilation or not existent). Examples: ZCs -> ZC's points independent nodes in the zone independent HCs in the zone independent NCs in the zone RCs in the zone RCs -> RC's points independent nodes in the region independent HCs in the region NCs in the region NCs -> NC's points independent nodes in the net HCs in the net HCs -> HC's points nodes in the Hub Node -> Node's points FlOfs: Offset into .DAT for the first direct downlink, in "zone/region/net/hub/node/point" order. ═══ 15.4.2.2. ═══ 3.2.2. ~~~~~~~~~~~~~~~~~ This is a word specifying the length of the following field. ═══ 15.4.2.3. ═══ 3.2.3. ~~~~~~~~~~~~~~~~~~~~~~~~~~ This is the zero terminated raw nodelist line, taken verbatim from the source nodelist; neither carriage-return nor line-feed is present. REQUIREMENTs for applications that use this field: - The line's fields must be recognized ONLY by considering the comma ',' as a separator. - Fields containing space are to be handled normally. - Unknown qualifiers at the start of the line (the field usued for Hub, Host, Region, Zone) must be accepted. - The second field (where the node number is usually placed) may contain further information and space: it must be accepted without error. ═══ 15.4.3. DTP extensions ═══ 3.3. DTP extensions ~~~~~~~~~~~~~~~~~~~ The DTP format is suitable for backward compatible extensions. If you would like new fields, please contact Alberto Pasquale (2:332/504@fidonet) and/or Thomas Waldmann (2:2474/400@fidonet) for discussion. If the new field is considered useful, a draft for the new version of V7+ will be issued by Alberto Pasquale. ═══ 15.5. .PDX Phone Index ═══ 4. .PDX Phone Index ========================== The purpose of the Phone Index is to allow an indexed search of a system entry from its phone number. This is especially useful with CID (caller ID) enabled systems. ═══ 15.5.1. .PDX format ═══ 4.1. .PDX format ~~~~~~~~~~~~~~~~~~~~~~~ The index is a btree, just like those for the Address and SysOp indices that are standard in Version 7. Phone numbers will be indexed in the "processed" dialable form (i.e. as in the V7 phone field) after removal of dashes. Special non-numerical phone entries, including IP addresses and internet domains, are indexed verbatim (the possible translations operated by the nodelist compiler to allow the dialing on some mailers is NOT applied to the indexed entry). The indexing is NOT case sensitive, although the case is retained in the index entries. The index look-up must be done just the same way as for the SysOp index: from the "phone number" string you obtain a pointer to the corresponding entry in the .DAT. Please be aware that multiple entries with the same "phone" are possible, e.g for administrative akas; the Phone links in .DTP allow easy browsing of all the "same phone" entries once you have got one by index. Currently there is no purpose in doing a case sensitive lookup; in the case it becomes useful in the future, the application may optionally provide settings to allow that by skipping non-case-matching entries. ═══ 15.5.2. The Look-up problem ═══ 4.2. The Look-up problem ~~~~~~~~~~~~~~~~~~~~~~~~ Since most ISDN devices do NOT report the CID as a "ready to dial" number, some processing is required before looking up the index. Let's classify the CID reported by ISDN devices in various nations into categories: Cat A reports CID with domestic and international dialing codes, local numbers have the area code. Cat B reports CID with NO long distance dialing code, local numbers have the area code. Cat C reports CID exactly as dialable. Cat D reports CID with NO long distance dialing code, local numbers are exactly dialable. I will now explain with an example: I live in Modena, Italy; Country code : 39 District (area) code : 59 domestic code : 0 international code : 00 Call Type A-CID B-CID Dialable Local 059246112 59246112 246112 Domestic 0513456789 513456789 0513456789 International 00492312345 492312345 00492312345 C-CID D-CID Local 246112 246112 Domestic 0513456789 513456789 International 00492312345 492312345 Processing needed: Category A: for local calls we need to remove the domestic and district codes; domestic and international calls do not need any processing. Category B: we need to attempt finding a domestic number then, in case of failure, try the international one; unfortunately the CID reported by these devices allows for some ambiguity. Category C: no processing needed. Category D: we need to attempt finding a local number, if not found we look for a domestic number, if still not found we try the international one. Even more ambigous than B. ═══ 15.5.3. The ALGORITHM ═══ 4.3. The ALGORITHM ~~~~~~~~~~~~~~~~~~ The application must have configurable District/Area, domestic and international codes; let's name them: AreaCode DomesticPrefix IntlPrefix Besides, the application must have a configurable "category", which must have selections for cases A,B,C,D; let's name this variable: Category Let "Search" be the name of a function that does the index look-up. Please be aware that the index may contain multiple entries with the same "phone" value (perhaps administrative akas). "Restore CID" means "restore the CID as got from the device". Start: get CID if (category == A) { If (CID begins with DomesticPrefix+AreaCode) Remove DomesticPrefix and AreaCode // is local Search goto END } if (category == B) { If (CID begins with AreaCode) { // local or intl remove AreaCode // try local Search if (found) goto END // is local else { Restore CID Add IntlPrefix // try international Search goto END } } else { // domestic or intl Add DomesticPrefix // try domestic Search if (found) goto END // is domestic else { Restore CID // try intl Add IntlPrefix Search goto END } } } if (category == C) { // no processing required Search goto END } if (category == D) { Search // try local if (found) // is local goto END else { Add DomesticPrefix // try domestic Search if (found) // is domestic goto END else { // try international Restore CID Add IntlPrefix Search goto END } } } END: report results (pointer to NODEX.DAT or nothing found) The Phone links in .DTP allow easy browsing of all remaining "same phone" entries. ═══ 15.6. V7+ Semaphore ═══ 5. V7+ Semaphore ================ To avoid collisions between the nodelist compiler and V7+ applications, a semaphore is used. When the compiler needs exclusive access to the nodelist files, it creates (if non existent) and keeps open in SH_DENYRW mode a ".BSY" file. When the application must access the nodelist files, it creates (if non existent) and keeps open for reading in SH_DENYWR mode the ".BSY" file. This method allows for concurrent access by multiple programs in "read" mode, while granting exclusive access to the compiler. Please note that .BSY does NOT need to be deleted in case of abnormal termination or power failure since it's considered busy only while kept open. Example for a program that must read V7+: bsyname is the ".BSY" file name; timeout is the timeout in seconds; the file handle is returned on success, -1 on timeout int waitopen (const char *bsyname, int timeout) // -1 on timeout { int ret = -1; int i = 0; do { if (i > 0) sleep (1); if (access (bsyname, F_OK)) { // file not existent int handle = open (bsyname, O_WRONLY | O_CREAT, S_IWRITE); if (handle != -1) close (handle); } ret = sopen (bsyname, O_RDONLY, SH_DENYWR); i ++; } while ((ret == -1) && (i < timeout) && ((errno == EACCES) || (errno == ENOENT))); // sharing violation or file not found return ret; } ═══ 15.7. Space/Time needed for V7+ database vs. usability ═══ 6. Space/Time needed for V7+ database vs. usability =================================================== The V7+ DTP file may be considered redundant, since it contains the entire "source" nodelist line, that duplicates some of the information already present in the V7 DAT file. Let's look at the time and space overhead involved and at the gain in usability: Time: Accessing V7+ is as fast as V7, if you use the normal V7 access method (and if you are NOT interested in the additional data). If you access the additional data in the .DTP file, you have 1 direct file access more. Nothing to worry about... Generating a V7+ database will take somewhat longer since there is more data to be written to disk, links to be set, indices to be prepared; on modern machines this should not be a concern. Space: Space needed is about twice as much as for V7, but this should be no concern on modern machines. Usability: - Full and complete (no lossy compression) nodelist information - Phone Index for easy CID lookup - SysOp/Phone/Fidonet links for easy nodelist browsing - Backward compatible extendability ═══ 15.8. Sample "C" source code (taken from BT-XE) ═══ 7. Sample "C" source code (taken from BT-XE) ============================================ See archive v7p_src.* ... Attention: this source code is far from being final - in fact it is the very first V7+ implementation in BT-XE and does not support all stuff that has been defined in this document. But it can read and parse V7+ data and is maybe better than no source code at all ... ═══ 15.9. History of this document ═══ 8. History of this document =========================== Draft 1->8: preliminary thoughts about possible versions of V7+. Draft 9: completely rewritten, this should be the final "Version_0" of V7+. Version 0: first release version.